Azerotcore-wotlk
Classes | Macros | Typedefs | Enumerations | Functions | Variables
stdsoap2.h File Reference
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <limits.h>
#include <float.h>
#include <math.h>
#include <errno.h>
#include <sys/types.h>
#include <time.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <strings.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h>
#include <fcntl.h>

Go to the source code of this file.

Classes

union  soap_double_nan
 
struct  Namespace
 
struct  soap_nlist
 
struct  soap_bhead
 
struct  soap_blist
 
struct  soap_plist
 
struct  soap_pblk
 
struct  soap_clist
 
struct  soap_attribute
 
struct  soap_cookie
 
struct  soap_dime
 
struct  soap_mime
 
struct  soap_multipart
 
struct  soap_xlist
 
struct  soap_dom_attribute
 
struct  soap_dom_element
 
struct  soap
 
struct  soap_code_map
 
struct  soap_flist
 
struct  soap_ilist
 
struct  soap_plugin
 

Macros

#define GSOAP_VERSION   208105
 
#define _THREAD_SAFE
 
#define _REENTRANT
 
#define SOAP_FMAC1
 
#define SOAP_FMAC2
 
#define SOAP_FMAC3
 
#define SOAP_FMAC3S   SOAP_FMAC3
 
#define SOAP_FMAC4
 
#define SOAP_FMAC4S   SOAP_FMAC4
 
#define SOAP_FMAC5
 
#define SOAP_FMAC6
 
#define SOAP_CMAC
 
#define SOAP_NMAC
 
#define SOAP_SOURCE_STAMP(str)
 
#define STDSOAP_H
 
#define SOAP_XSTRINGIFY(s)   SOAP_STRINGIFY(s)
 
#define SOAP_STRINGIFY(s)   #s
 
#define WITH_NO_C_LOCALE   /* turn locale support off by default */
 
#define HAVE_SNPRINTF
 
#define HAVE_STRRCHR
 
#define HAVE_STRTOD
 
#define HAVE_SSCANF
 
#define HAVE_STRTOL
 
#define HAVE_STRTOUL
 
#define HAVE_STRTOLL
 
#define HAVE_STRTOULL
 
#define HAVE_GETTIMEOFDAY
 
#define HAVE_RAND_R
 
#define HAVE_GETHOSTBYNAME_R
 
#define HAVE_GMTIME_R
 
#define HAVE_ASCTIME_R
 
#define HAVE_LOCALTIME_R
 
#define HAVE_STRERROR_R
 
#define HAVE_LOCALE_H
 
#define WITH_FAST
 
#define WITH_CDATA
 
#define WITH_NOEMPTYSTRUCT
 
#define SOAP_PURE_VIRTUAL
 
#define SOAP_PURE_VIRTUAL_COPY
 
#define SOAP_BINARY_BUFLEN   (128)
 
#define SOAP_WINSOCKINT   size_t
 
#define SOAP_STRCMP   strcmp /* case sensitive XML element/attribute names */
 
#define SOAP_SOCKLEN_T   socklen_t
 
#define SOAP_FUNC_R_ERR   (NULL)
 
#define SOAP_SOCKET   int
 
#define soap_closesocket(n)   close(n)
 
#define SOAP_INVALID_SOCKET   ((SOAP_SOCKET)-1)
 
#define soap_valid_socket(sk)   ((sk) != SOAP_INVALID_SOCKET)
 
#define SOAP_SHUT_WR   (1)
 
#define SOAP_SHUT_RDWR   (2)
 
#define SOAP_GAI_STRERROR   gai_strerror
 
#define FD_SETSIZE   (1024)
 
#define SOAP_CHK_EOF   (soap->error ? soap->error : SOAP_EOF)
 
#define LONG64   long long
 
#define ULONG64   unsigned LONG64
 
#define SOAP_LONG_FORMAT   "%lld" /* printf format for 64 bit long long ints */
 
#define SOAP_ULONG_FORMAT   "%llu" /* printf format for unsigned 64 bit long long ints */
 
#define soap_int32   int32_t
 
#define SOAP_ERANGE   (34)
 
#define SOAP_EINTR   EINTR
 
#define SOAP_EAGAIN   EAGAIN
 
#define SOAP_EADDRINUSE   EADDRINUSE
 
#define SOAP_ECONNREFUSED   ECONNREFUSED
 
#define SOAP_EWOULDBLOCK   EWOULDBLOCK
 
#define SOAP_EINPROGRESS   EINPROGRESS
 
#define soap_errno   errno
 
#define soap_socket_errno   errno
 
#define soap_reset_errno   (errno = ENOENT)
 
#define SOAP_BUFLEN   (65536) /* buffer length for socket packets, so don't make this too small */
 
#define SOAP_LABLEN   (256) /* initial look-aside buffer length */
 
#define SOAP_PTRBLK   (32) /* block allocation for pointer hash table chains */
 
#define SOAP_PTRHASH   (4096) /* size of pointer analysis hash table (must be power of 2) */
 
#define SOAP_IDHASH   (1999) /* 1999, 8191: prime size of hash table for parsed id/ref */
 
#define SOAP_BLKLEN   (256) /* to collect long strings and XML attributes */
 
#define SOAP_TAGLEN   (1024) /* maximum length of XML element tag/attribute name or host/path name + 1 */
 
#define SOAP_HDRLEN   (8192) /* maximum length of HTTP header line (must be >=4096 to read cookies) */
 
#define SOAP_TMPLEN   (2048) /* maximum length of msgbuf and tmpbuf short message buffers, must be >=1024 */
 
#define SOAP_MAXDIMS   (16) /* maximum array dimensions (array nestings) must be less than 64 to protect soap->tmpbuf */
 
#define SOAP_MAXPTRS   (4) /* maximum depth + 1 of id-ref deserialized pointer types (int* has depth 0, int*** has depth 2) */
 
#define SOAP_MAXALLOCSIZE   (0) /* max size that malloc() can handle, zero for no limit */
 
#define SOAP_MAXLOGS   (3) /* max number of debug logs per struct soap environment */
 
#define SOAP_INDEX_RECV   (0)
 
#define SOAP_INDEX_SENT   (1)
 
#define SOAP_INDEX_TEST   (2)
 
#define SOAP_MULTIREFTAG   "id"
 
#define SOAP_BASEREFNAME   "_"
 
#define SOAP_MAXEINTR   (10)
 
#define SOAP_MAXKEEPALIVE   (100)
 
#define SOAP_MAXARRAYSIZE   (100000)
 
#define SOAP_MAXDIMESIZE   (8*1048576) /* 8 MB */
 
#define SOAP_MAXINFLATESIZE   (1*1048576) /* 1 MB */
 
#define SOAP_MINDEFLATERATIO   (1.0/1032.0) /* ratio of deflated/inflated */
 
#define SOAP_MAXLEVEL   (10000)
 
#define SOAP_MAXLENGTH   (0)
 
#define SOAP_MAXOCCURS   (100000)
 
#define FLT_NAN   (soap_double_nan.fv)
 
#define FLT_PINFTY   (3.40282347e+38F)
 
#define FLT_NINFTY   (-FLT_PINFTY)
 
#define DBL_NAN   (soap_double_nan.dv)
 
#define DBL_PINFTY   (1.7976931348623157e+308)
 
#define DBL_NINFTY   (-DBL_PINFTY)
 
#define soap_isnan(n)   ((n) != (n))
 
#define soap_isinf(n)   (!soap_isnan(n) && soap_isnan((n) - (n)))
 
#define soap_ispinfd(n)   ((n) > 0 && soap_isinf(n))
 
#define soap_ispinff(n)   ((n) > 0 && soap_isinf(n))
 
#define soap_isninfd(n)   ((n) < 0 && soap_isinf(n))
 
#define soap_isninff(n)   ((n) < 0 && soap_isinf(n))
 
#define SOAP_SNPRINTF(buf, len, num)   void)snprintf((buf), (len)
 
#define SOAP_SNPRINTF_SAFE(buf, len)   void)snprintf((buf), (len)
 
#define soap_strcpy(buf, len, src)   (void)(strncpy((buf), (src), (len)), (buf)[(len) - 1] = '\0')
 
#define soap_strncpy(buf, len, src, num)   ((buf) == NULL || ((size_t)(len) > (size_t)(num) ? (strncpy((buf), (src), (num)), (buf)[(size_t)(num)] = '\0') : ((buf)[0] = '\0', 1)))
 
#define soap_memcpy(buf, len, src, num)   ((size_t)(len) >= (size_t)(num) ? !memcpy((buf), (src), (num)) : SOAP_ERANGE)
 
#define soap_memmove(buf, len, src, num)   ((size_t)(len) >= (size_t)(num) ? !memmove((buf), (src), (num)) : SOAP_ERANGE)
 
#define SOAP_EOF   EOF
 
#define SOAP_OK   0
 
#define SOAP_CLI_FAULT   1
 
#define SOAP_SVR_FAULT   2
 
#define SOAP_TAG_MISMATCH   3
 
#define SOAP_TYPE   4
 
#define SOAP_SYNTAX_ERROR   5
 
#define SOAP_NO_TAG   6
 
#define SOAP_IOB   7
 
#define SOAP_MUSTUNDERSTAND   8
 
#define SOAP_NAMESPACE   9
 
#define SOAP_USER_ERROR   10
 
#define SOAP_FATAL_ERROR   11 /* deprecated */
 
#define SOAP_FAULT   12
 
#define SOAP_NO_METHOD   13
 
#define SOAP_NO_DATA   14
 
#define SOAP_GET_METHOD   15
 
#define SOAP_PUT_METHOD   16
 
#define SOAP_PATCH_METHOD   17
 
#define SOAP_DEL_METHOD   18
 
#define SOAP_HTTP_METHOD   19
 
#define SOAP_EOM   20
 
#define SOAP_MOE   21
 
#define SOAP_HDR   22
 
#define SOAP_NULL   23
 
#define SOAP_DUPLICATE_ID   24
 
#define SOAP_MISSING_ID   25
 
#define SOAP_HREF   26
 
#define SOAP_UDP_ERROR   27
 
#define SOAP_TCP_ERROR   28
 
#define SOAP_HTTP_ERROR   29
 
#define SOAP_SSL_ERROR   30
 
#define SOAP_ZLIB_ERROR   31
 
#define SOAP_DIME_ERROR   32
 
#define SOAP_DIME_HREF   33
 
#define SOAP_DIME_MISMATCH   34
 
#define SOAP_DIME_END   35
 
#define SOAP_MIME_ERROR   36
 
#define SOAP_MIME_HREF   37
 
#define SOAP_MIME_END   38
 
#define SOAP_VERSIONMISMATCH   39
 
#define SOAP_PLUGIN_ERROR   40
 
#define SOAP_DATAENCODINGUNKNOWN   41 /* unused */
 
#define SOAP_REQUIRED   42
 
#define SOAP_PROHIBITED   43
 
#define SOAP_OCCURS   44
 
#define SOAP_LENGTH   45
 
#define SOAP_PATTERN   46
 
#define SOAP_FD_EXCEEDED   47
 
#define SOAP_UTF_ERROR   48
 
#define SOAP_NTLM_ERROR   49
 
#define SOAP_LEVEL   50
 
#define SOAP_FIXED   51
 
#define SOAP_EMPTY   52
 
#define SOAP_END_TAG   53
 
#define SOAP_ERR   99
 
#define soap_xml_error_check(e)
 
#define soap_soap_error_check(e)
 
#define soap_http_error_check(e)
 
#define soap_dime_error_check(e)
 
#define soap_mime_error_check(e)
 
#define soap_tcp_error_check(e)
 
#define soap_udp_error_check(e)
 
#define soap_ssl_error_check(e)   ((e) == SOAP_SSL_ERROR)
 
#define soap_zlib_error_check(e)   ((e) == SOAP_ZLIB_ERROR)
 
#define SOAP_STOP   1000 /* No HTTP response should follow after SOAP_STOP is issued */
 
#define SOAP_FORM   1001 /* Request (form) data is present, no HTTP response should follow */
 
#define SOAP_HTML   1002 /* Custom HTML response */
 
#define SOAP_FILE   1200 /* Custom file-based response with soap::http_content and optional http status */
 
#define SOAP_POST   2000 /* POST request */
 
#define SOAP_POST_FILE   2001 /* Custom file-based POST request */
 
#define SOAP_GET   2002 /* GET request */
 
#define SOAP_PUT   2003 /* PUT request */
 
#define SOAP_PATCH   2004 /* PATCH request */
 
#define SOAP_DEL   2005 /* DELETE request */
 
#define SOAP_HEAD   2006 /* HEAD request */
 
#define SOAP_OPTIONS   2007 /* OPTIONS request */
 
#define SOAP_CONNECT   2008 /* CONNECT request */
 
#define SOAP_DIME_CF   0x01
 
#define SOAP_DIME_ME   0x02
 
#define SOAP_DIME_MB   0x04
 
#define SOAP_DIME_VERSION   0x08 /* DIME version 1 */
 
#define SOAP_DIME_MEDIA   0x10
 
#define SOAP_DIME_ABSURI   0x20
 
#define SOAP_ZLIB_NONE   0x00
 
#define SOAP_ZLIB_DEFLATE   0x01
 
#define SOAP_ZLIB_INFLATE   0x02
 
#define SOAP_ZLIB_GZIP   0x02
 
#define SOAP_IO   0x00000003 /* IO mask */
 
#define SOAP_IO_FLUSH   0x00000000 /* out: flush output immediately, no buffering */
 
#define SOAP_IO_BUFFER   0x00000001 /* out: buffer output in packets of size SOAP_BUFLEN */
 
#define SOAP_IO_STORE   0x00000002 /* out: store entire output to determine length for transport */
 
#define SOAP_IO_CHUNK   0x00000003 /* out: use HTTP chunked transfer AND buffer packets */
 
#define SOAP_IO_UDP   0x00000004 /* in/out: enable UDP instead of TCP */
 
#define SOAP_IO_LENGTH   0x00000008 /* out: calc message length (internal) */
 
#define SOAP_IO_KEEPALIVE   0x00000010 /* out: keep connection alive */
 
#define SOAP_ENC   0x00000FFF /* IO and ENC mask */
 
#define SOAP_ENC_LATIN   0x00000020 /* in: accept iso-8859-1 */
 
#define SOAP_ENC_PLAIN   0x00000040 /* out: plain (XML or other) body, no HTTP header */
 
#define SOAP_ENC_XML   0x00000040 /* deprecated, alias for SOAP_ENC_PLAIN */
 
#define SOAP_ENC_DIME   0x00000080
 
#define SOAP_ENC_MIME   0x00000100
 
#define SOAP_ENC_MTOM   0x00000200
 
#define SOAP_ENC_ZLIB   0x00000400
 
#define SOAP_ENC_SSL   0x00000800
 
#define SOAP_XML_STRICT   0x00001000 /* in: strict validation */
 
#define SOAP_XML_INDENT   0x00002000 /* out: emit indented XML */
 
#define SOAP_XML_IGNORENS   0x00004000 /* in: ignore namespaces */
 
#define SOAP_XML_DEFAULTNS   0x00008000 /* out: emit xmlns="..." */
 
#define SOAP_XML_CANONICAL   0x00010000 /* out: exc-C14N exclusive canonical XML */
 
#define SOAP_XML_TREE   0x00020000 /* in/out: XML tree (no id/ref) */
 
#define SOAP_XML_NIL   0x00040000 /* out: all NULLs as xsi:nil */
 
#define SOAP_XML_NOTYPE   0x00080000 /* out: do not add xsi:type */
 
#define SOAP_DOM_TREE   0x00100000 /* see DOM manual */
 
#define SOAP_DOM_NODE   0x00200000
 
#define SOAP_DOM_ASIS   0x00400000
 
#define SOAP_XML_CANONICAL_NA   0x00800000 /* out: (exc) C14N not QName aware */
 
#define SOAP_C_NOIOB   0x01000000 /* don't fault on array index out of bounds (just ignore) */
 
#define SOAP_C_UTFSTRING   0x02000000 /* (de)serialize strings with UTF8 content */
 
#define SOAP_C_MBSTRING   0x04000000 /* (de)serialize strings with multi-byte content */
 
#define SOAP_C_NILSTRING   0x08000000 /* serialize empty strings as nil (omitted) */
 
#define SOAP_XML_DOM   0x10000000 /* enable internal DOM */
 
#define SOAP_XML_GRAPH   0x20000000 /* force id-ref XML graph */
 
#define SOAP_MIME_POSTCHECK   0x40000000 /* MIME flag (internal) */
 
#define SOAP_SEC_WSUID   0x80000000 /* Add Body wsu:Id flag (internal) */
 
#define SOAP_IO_DEFAULT   SOAP_IO_FLUSH
 
#define SOAP_SSL_NO_AUTHENTICATION   (0x0000) /* no authentication */
 
#define SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION   (0x0001) /* client requires server to authenticate */
 
#define SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION   (0x0002) /* server requires client to authenticate */
 
#define SOAP_SSL_SKIP_HOST_CHECK   (0x0004) /* client skips common name check against host name */
 
#define SOAP_SSL_ALLOW_EXPIRED_CERTIFICATE   (0x0008) /* allow self-signed and expired certificates and those w/o CRL */
 
#define SOAP_SSL_NO_DEFAULT_CA_PATH   (0x0010) /* don't use SSL_CTX_set_default_verify_paths */
 
#define SOAP_SSL_RSA   (0x0020) /* use RSA */
 
#define SOAP_SSLv3   (0x0080) /* enable SSL v3 */
 
#define SOAP_TLSv1_0   (0x0100) /* enable TLS v1.0 */
 
#define SOAP_TLSv1_1   (0x0200) /* enable TLS v1.1 */
 
#define SOAP_TLSv1_2   (0x0400) /* enable TLS v1.2 */
 
#define SOAP_TLSv1_3   (0x0800) /* enable TLS v1.3 */
 
#define SOAP_TLSv1   (SOAP_TLSv1_0 | SOAP_TLSv1_1 | SOAP_TLSv1_2 | SOAP_TLSv1_3)
 
#define SOAP_SSLv3_TLSv1   (SOAP_SSLv3 | SOAP_TLSv1)
 
#define SOAP_SSL_CLIENT   (0x8000) /* client context flag for internal use */
 
#define SOAP_SSL_DEFAULT   SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION
 
#define SOAP_NONE   0
 
#define SOAP_INIT   1
 
#define SOAP_COPY   2
 
#define soap_check_state(soap)   (!(soap) || ((soap)->state != SOAP_INIT && (soap)->state != SOAP_COPY))
 
#define SOAP_END   0
 
#define SOAP_BEGIN_SEND   1
 
#define SOAP_BEGIN_RECV   2
 
#define SOAP_IN_ENVELOPE   3
 
#define SOAP_IN_HEADER   4
 
#define SOAP_END_HEADER   5
 
#define SOAP_NO_BODY   6
 
#define SOAP_IN_BODY   7
 
#define SOAP_END_BODY   8
 
#define SOAP_END_ENVELOPE   9
 
#define SOAP_SEC_BEGIN   1
 
#define SOAP_SEC_SIGN   2
 
#define SOAP_SEC_DECRYPT   3
 
#define SOAP_MALLOC(soap, size)   malloc((size))
 
#define SOAP_FREE(soap, ptr)   free((void*)(ptr))
 
#define SOAP_MALLOC_UNMANAGED(size)   malloc((size))
 
#define SOAP_FREE_UNMANAGED(ptr)   free((void*)(ptr))
 
#define SOAP_NOTHROW   (std::nothrow)
 
#define SOAP_NEW(soap, type)   new SOAP_NOTHROW (type)
 
#define SOAP_NEW_ARRAY(soap, type, n)   new SOAP_NOTHROW type[n]
 
#define SOAP_PLACEMENT_NEW(soap, buf, type)   new (buf) (type)
 
#define SOAP_DELETE(soap, obj, type)   delete obj
 
#define SOAP_DELETE_ARRAY(soap, obj, type)   delete[] obj
 
#define SOAP_NEW_UNMANAGED(soap)   new SOAP_NOTHROW soap
 
#define SOAP_DELETE_UNMANAGED(soap)   delete soap
 
#define DBGLOG(DBGFILE, CMD)
 
#define DBGMSG(DBGFILE, MSG, LEN)
 
#define DBGFUN(FNAME)
 
#define DBGFUN1(FNAME, FMT, ARG)
 
#define DBGFUN2(FNAME, FMT1, ARG1, FMT2, ARG2)
 
#define DBGFUN3(FNAME, FMT1, ARG1, FMT2, ARG2, FMT3, ARG3)
 
#define DBGFUN4(FNAME, FMT1, ARG1, FMT2, ARG2, FMT3, ARG3, FMT4, ARG4)
 
#define DBGHEX(DBGFILE, MSG, LEN)
 
#define soap_get0(soap)   (((soap)->bufidx>=(soap)->buflen && soap_recv(soap)) ? EOF : (unsigned char)(soap)->buf[(soap)->bufidx])
 
#define soap_get1(soap)   (((soap)->bufidx>=(soap)->buflen && soap_recv(soap)) ? EOF : (unsigned char)(soap)->buf[(soap)->bufidx++])
 
#define soap_versioning_paste(name, ext)   name##_REQUIRE_lib_v##ext
 
#define soap_versioning_ext(name, ext)   soap_versioning_paste(name, ext)
 
#define soap_versioning(name)   soap_versioning_ext(name, GSOAP_VERSION)
 
#define soap_init(soap)   soap_init1(soap, SOAP_IO_DEFAULT)
 
#define soap_init1(soap, mode)   soap_init2(soap, mode, mode)
 
#define soap_init2(soap, imode, omode)   soap_versioning(soap_init)(soap, imode, omode)
 
#define soap_new()   soap_new1(SOAP_IO_DEFAULT)
 
#define soap_new1(mode)   soap_new2(mode, mode)
 
#define soap_new2(imode, omode)   soap_versioning(soap_new)(imode, omode)
 
#define soap_revget1(soap)   ((soap)->bufidx--)
 
#define soap_unget(soap, c)   ((soap)->ahead = c)
 
#define soap_peek(soap)   ((soap)->ahead = soap_get(soap))
 
#define soap_register_plugin(soap, plugin)   soap_register_plugin_arg(soap, plugin, NULL)
 
#define soap_mode(soap, n)   ((soap)->mode = (soap)->imode = (soap)->omode = (n))
 
#define soap_imode(soap, n)   ((soap)->imode = (n))
 
#define soap_omode(soap, n)   ((soap)->omode = (n))
 
#define soap_set_imode(soap, n)   ((soap)->imode |= (n))
 
#define soap_clr_imode(soap, n)   ((soap)->imode &= ~(n))
 
#define soap_set_omode(soap, n)   ((soap)->omode |= (n))
 
#define soap_clr_omode(soap, n)   ((soap)->omode &= ~(n))
 
#define soap_set_mode(soap, n)   ((soap)->mode |= (n), (soap)->imode |= (n), (soap)->omode |= (n))
 
#define soap_clr_mode(soap, n)   ((soap)->mode &= ~(n), (soap)->imode &= ~(n), (soap)->omode &= ~(n))
 
#define soap_destroy(soap)   soap_delete((soap), NULL)
 
#define SOAP_NO_LINK_TO_DELETE   (-2) /* pass to soap_link() as size n: do not manage, smart pointers are self-managing */
 
#define soap_strrchr(s, t)   strrchr(s, t)
 
#define soap_strtol(s, t, b)   strtol(s, t, b)
 
#define soap_strtoul(s, t, b)   strtoul(s, t, b)
 
#define soap_strtoll   strtoll
 
#define soap_strtoull   strtoull
 
#define soap_random   rand()
 

Typedefs

typedef soap_int32 soap_status
 
typedef int soap_http_command
 
typedef soap_int32 soap_mode
 
typedef unsigned short soap_ssl_flags
 
typedef soap_int32 soap_wchar
 
typedef void soap_walker(struct soap *, void *, int, const char *, const char *)
 

Enumerations

enum  soap_mime_encoding {
  SOAP_MIME_NONE , SOAP_MIME_7BIT , SOAP_MIME_8BIT , SOAP_MIME_BINARY ,
  SOAP_MIME_QUOTED_PRINTABLE , SOAP_MIME_BASE64 , SOAP_MIME_IETF_TOKEN , SOAP_MIME_X_TOKEN
}
 

Functions

SOAP_FMAC1 void SOAP_FMAC2 soap_strcat (char *buf, size_t len, const char *src)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_strncat (char *buf, size_t len, const char *src, size_t num)
 
SOAP_FMAC1 struct soap_multipart *SOAP_FMAC2 soap_next_multipart (struct soap_multipart *)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_elt_new (struct soap *soap, const char *ns, const char *tag)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_elt_new_w (struct soap *soap, const char *ns, const wchar_t *tag)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_elt_set (struct soap_dom_element *elt, const char *ns, const char *tag)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_elt_set_w (struct soap_dom_element *elt, const char *ns, const wchar_t *tag)
 
SOAP_FMAC1 struct soap_dom_attribute *SOAP_FMAC2 soap_att (struct soap_dom_element *elt, const char *ns, const char *tag)
 
SOAP_FMAC1 struct soap_dom_attribute *SOAP_FMAC2 soap_att_w (struct soap_dom_element *elt, const char *ns, const wchar_t *tag)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_elt (struct soap_dom_element *elt, const char *ns, const char *tag)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_elt_w (struct soap_dom_element *elt, const char *ns, const wchar_t *tag)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_nth_elt (struct soap_dom_element *elt, const char *ns, const char *tag, size_t n)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_nth_elt_w (struct soap_dom_element *elt, const char *ns, const wchar_t *tag, size_t n)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_nth (struct soap_dom_element *elt, size_t n)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_add_att (struct soap_dom_element *elt, const struct soap_dom_attribute *node)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_add_elt (struct soap_dom_element *elt, const struct soap_dom_element *node)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_add_atts (struct soap_dom_element *elt, const struct soap_dom_attribute *atts)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_add_elts (struct soap_dom_element *elt, const struct soap_dom_element *elts)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_elt_bool (struct soap_dom_element *elt, LONG64 b)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_elt_int (struct soap_dom_element *elt, LONG64 n)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_elt_double (struct soap_dom_element *elt, double x)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_elt_text (struct soap_dom_element *elt, const char *text)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_elt_text_w (struct soap_dom_element *elt, const wchar_t *text)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_elt_node (struct soap_dom_element *elt, const void *node, int type)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_elt_copy (struct soap_dom_element *elt, const struct soap_dom_element *node)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_elt_match (const struct soap_dom_element *elt, const char *ns, const char *patt)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_elt_match_w (const struct soap_dom_element *elt, const char *ns, const wchar_t *patt)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_elt_get_ns (const struct soap_dom_element *elt)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_elt_get_tag (const struct soap_dom_element *elt)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_elt_is_true (const struct soap_dom_element *elt)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_elt_is_false (const struct soap_dom_element *elt)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_elt_get_int (const struct soap_dom_element *elt)
 
SOAP_FMAC1 long SOAP_FMAC2 soap_elt_get_long (const struct soap_dom_element *elt)
 
SOAP_FMAC1 LONG64 SOAP_FMAC2 soap_elt_get_LONG64 (const struct soap_dom_element *elt)
 
SOAP_FMAC1 double SOAP_FMAC2 soap_elt_get_double (const struct soap_dom_element *elt)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_elt_get_text (const struct soap_dom_element *elt)
 
SOAP_FMAC1 const void *SOAP_FMAC2 soap_elt_get_node (const struct soap_dom_element *elt, int type)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_elt_get_type (const struct soap_dom_element *elt, const void **node)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_elt_parent (const struct soap_dom_element *elt)
 
SOAP_FMAC1 size_t SOAP_FMAC2 soap_elt_depth (const struct soap_dom_element *elt)
 
SOAP_FMAC1 size_t SOAP_FMAC2 soap_elt_index (const struct soap_dom_element *elt)
 
SOAP_FMAC1 size_t SOAP_FMAC2 soap_elt_len (const struct soap_dom_element *elt)
 
SOAP_FMAC1 size_t SOAP_FMAC2 soap_elt_nth (const struct soap_dom_element *elt)
 
SOAP_FMAC1 struct soap_dom_attribute *SOAP_FMAC2 soap_att_new (struct soap *soap, const char *ns, const char *tag)
 
SOAP_FMAC1 struct soap_dom_attribute *SOAP_FMAC2 soap_att_new_w (struct soap *soap, const char *ns, const wchar_t *tag)
 
SOAP_FMAC1 struct soap_dom_attribute *SOAP_FMAC2 soap_att_set (struct soap_dom_attribute *att, const char *ns, const char *tag)
 
SOAP_FMAC1 struct soap_dom_attribute *SOAP_FMAC2 soap_att_set_w (struct soap_dom_attribute *att, const char *ns, const wchar_t *tag)
 
SOAP_FMAC1 struct soap_dom_attribute *SOAP_FMAC2 soap_att_add (struct soap_dom_attribute *att, const char *ns, const char *tag)
 
SOAP_FMAC1 struct soap_dom_attribute *SOAP_FMAC2 soap_att_add_w (struct soap_dom_attribute *att, const char *ns, const wchar_t *tag)
 
SOAP_FMAC1 struct soap_dom_attribute *SOAP_FMAC2 soap_att_bool (struct soap_dom_attribute *att, LONG64 b)
 
SOAP_FMAC1 struct soap_dom_attribute *SOAP_FMAC2 soap_att_int (struct soap_dom_attribute *att, LONG64 n)
 
SOAP_FMAC1 struct soap_dom_attribute *SOAP_FMAC2 soap_att_double (struct soap_dom_attribute *att, double x)
 
SOAP_FMAC1 struct soap_dom_attribute *SOAP_FMAC2 soap_att_text (struct soap_dom_attribute *att, const char *text)
 
SOAP_FMAC1 struct soap_dom_attribute *SOAP_FMAC2 soap_att_text_w (struct soap_dom_attribute *att, const wchar_t *text)
 
SOAP_FMAC1 struct soap_dom_attribute *SOAP_FMAC2 soap_att_copy (struct soap_dom_attribute *att, const struct soap_dom_attribute *node)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_att_match (const struct soap_dom_attribute *att, const char *ns, const char *patt)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_att_match_w (const struct soap_dom_attribute *att, const char *ns, const wchar_t *patt)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_att_get_ns (const struct soap_dom_attribute *att)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_att_get_tag (const struct soap_dom_attribute *att)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_att_is_true (const struct soap_dom_attribute *att)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_att_is_false (const struct soap_dom_attribute *att)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_att_get_int (const struct soap_dom_attribute *att)
 
SOAP_FMAC1 long SOAP_FMAC2 soap_att_get_long (const struct soap_dom_attribute *att)
 
SOAP_FMAC1 LONG64 SOAP_FMAC2 soap_att_get_LONG64 (const struct soap_dom_attribute *att)
 
SOAP_FMAC1 double SOAP_FMAC2 soap_att_get_double (const struct soap_dom_attribute *att)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_att_get_text (const struct soap_dom_attribute *att)
 
SOAP_FMAC1 struct soap_dom_attribute *SOAP_FMAC2 soap_att_first (struct soap_dom_element *elt)
 
SOAP_FMAC1 struct soap_dom_attribute *SOAP_FMAC2 soap_att_next (const struct soap_dom_attribute *att)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_elt_first (struct soap_dom_element *elt)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_elt_next (const struct soap_dom_element *elt)
 
SOAP_FMAC1 struct soap_dom_attribute *SOAP_FMAC2 soap_att_get (const struct soap_dom_element *elt, const char *ns, const char *tag)
 
SOAP_FMAC1 struct soap_dom_attribute *SOAP_FMAC2 soap_att_get_w (const struct soap_dom_element *elt, const char *ns, const wchar_t *tag)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_elt_get (const struct soap_dom_element *elt, const char *ns, const char *tag)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_elt_get_w (const struct soap_dom_element *elt, const char *ns, const wchar_t *tag)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_elt_get_next (const struct soap_dom_element *elt)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_elt_get_nth (struct soap_dom_element *elt, size_t n)
 
SOAP_FMAC1 struct soap_dom_attribute *SOAP_FMAC2 soap_att_find (struct soap_dom_element *elt, const char *ns, const char *patt)
 
SOAP_FMAC1 struct soap_dom_attribute *SOAP_FMAC2 soap_att_find_next (const struct soap_dom_attribute *att, const char *ns, const char *patt)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_elt_find (struct soap_dom_element *elt, const char *ns, const char *patt)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_elt_find_next (const struct soap_dom_element *elt, const char *ns, const char *patt)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_elt_find_type (struct soap_dom_element *elt, const char *ns, const char *patt, int type)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_elt_find_next_type (const struct soap_dom_element *elt, const char *ns, const char *patt, int type)
 
SOAP_FMAC1 size_t SOAP_FMAC2 soap_att_size (struct soap_dom_element *elt, const char *ns, const char *patt)
 
SOAP_FMAC1 size_t SOAP_FMAC2 soap_elt_size (struct soap_dom_element *elt, const char *ns, const char *patt)
 
SOAP_FMAC1 size_t SOAP_FMAC2 soap_elt_size_type (struct soap_dom_element *elt, const char *ns, const char *patt, int type)
 
SOAP_FMAC1 struct soap_dom_attribute *SOAP_FMAC2 soap_dom_next_attribute (const struct soap_dom_attribute *att)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_dom_next_element (const struct soap_dom_element *elt, const struct soap_dom_element *end)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_dom_find (struct soap_dom_element *begin, const struct soap_dom_element *end, const char *ns, const char *patt, int type)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_dom_find_next (const struct soap_dom_element *elt, const struct soap_dom_element *end, const char *ns, const char *patt, int type)
 
SOAP_FMAC1 struct soap_dom_element *SOAP_FMAC2 soap_dup_xsd__anyType (struct soap *soap, struct soap_dom_element *d, const struct soap_dom_element *a)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_del_xsd__anyType (const struct soap_dom_element *a)
 
SOAP_FMAC1 struct soap_dom_attribute *SOAP_FMAC2 soap_dup_xsd__anyAttribute (struct soap *soap, struct soap_dom_attribute *d, const struct soap_dom_attribute *a)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_del_xsd__anyAttribute (const struct soap_dom_attribute *a)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_dom_call (struct soap *soap, const char *endpoint, const char *action, const struct soap_dom_element *in, struct soap_dom_element *out)
 
SOAP_FMAC5 int SOAP_FMAC6 soap_serve (struct soap *soap)
 
SOAP_FMAC5 int SOAP_FMAC6 soap_serve_request (struct soap *soap)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_ssl_init (void)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_ssl_noinit (void)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_GET (struct soap *, const char *, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_PUT (struct soap *, const char *, const char *, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_PATCH (struct soap *, const char *, const char *, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_POST (struct soap *, const char *, const char *, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_DELETE (struct soap *, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_connect_command (struct soap *, int, const char *, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_connect (struct soap *, const char *, const char *)
 
SOAP_FMAC1 SOAP_SOCKET SOAP_FMAC2 soap_bind (struct soap *, const char *, int, int)
 
SOAP_FMAC1 SOAP_SOCKET SOAP_FMAC2 soap_accept (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_ssl_accept (struct soap *)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_ssl_error (struct soap *, int ret, int err)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_ssl_crl (struct soap *, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_poll (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_ready (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_ssl_server_context (struct soap *soap, unsigned short flags, const char *keyfile, const char *password, const char *cafile, const char *capath, const char *dhfile, const char *randfile, const char *sid)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_ssl_client_context (struct soap *soap, unsigned short flags, const char *keyfile, const char *password, const char *cafile, const char *capath, const char *randfile)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_http_content_type (struct soap *soap, int status)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_puthttphdr (struct soap *, int status, ULONG64 count)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_http_header_attribute (struct soap *, const char *, const char *)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_decode_key (char *, size_t, const char *)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_decode_val (char *, size_t, const char *)
 
SOAP_FMAC1 size_t SOAP_FMAC2 soap_hash (const char *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_set_endpoint (struct soap *, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_flush_raw (struct soap *, const char *, size_t)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_flush (struct soap *)
 
SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_get (struct soap *)
 
SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_getchar (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_tag_cmp (const char *, const char *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_set_fault (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_sender_fault (struct soap *, const char *, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_sender_fault_subcode (struct soap *, const char *, const char *, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_receiver_fault (struct soap *, const char *, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_receiver_fault_subcode (struct soap *, const char *, const char *, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_set_sender_error (struct soap *, const char *, const char *, int)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_set_receiver_error (struct soap *, const char *, const char *, int)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_send_raw (struct soap *, const char *, size_t)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_recv_raw (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_recv (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_send (struct soap *, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_send2 (struct soap *, const char *, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_send3 (struct soap *, const char *, const char *, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_query_send_key (struct soap *, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_query_send_val (struct soap *, const char *)
 
SOAP_FMAC1 char *SOAP_FMAC2 soap_query (struct soap *)
 
SOAP_FMAC1 char *SOAP_FMAC2 soap_query_key (struct soap *, char **)
 
SOAP_FMAC1 char *SOAP_FMAC2 soap_query_val (struct soap *, char **)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_query_decode (char *, size_t, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_pututf8 (struct soap *, unsigned long)
 
SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_getutf8 (struct soap *)
 
SOAP_FMAC1 size_t SOAP_FMAC2 soap_utf8len (const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_putbase64 (struct soap *, const unsigned char *, int)
 
SOAP_FMAC1 unsigned char *SOAP_FMAC2 soap_getbase64 (struct soap *, int *, int)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_puthex (struct soap *, const unsigned char *, int)
 
SOAP_FMAC1 unsigned char *SOAP_FMAC2 soap_gethex (struct soap *, int *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_xop_forward (struct soap *, unsigned char **, int *, char **, char **, char **)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_attachment_forward (struct soap *, unsigned char **, int *, char **, char **, char **)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_pointer_lookup (struct soap *, const void *p, int t, struct soap_plist **)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_pointer_enter (struct soap *, const void *p, const void *a, int n, int t, struct soap_plist **)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_array_pointer_lookup (struct soap *, const void *p, const void *a, int n, int t, struct soap_plist **)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_pointer_lookup_id (struct soap *, void *p, int t, struct soap_plist **)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_embed (struct soap *soap, const void *p, const void *a, int n, int t)
 
SOAP_FMAC1 struct soap_ilist *SOAP_FMAC2 soap_lookup (struct soap *, const char *)
 
SOAP_FMAC1 struct soap_ilist *SOAP_FMAC2 soap_enter (struct soap *, const char *, int t, size_t n)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_resolve (struct soap *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_embedded (struct soap *, const void *p, int t)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_reference (struct soap *, const void *p, int t)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_array_reference (struct soap *, const void *p, const void *a, int n, int t)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_attachment_reference (struct soap *soap, const void *p, const void *a, int n, int t, const char *id, const char *type)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_embedded_id (struct soap *, int id, const void *p, int t)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_is_embedded (struct soap *, struct soap_plist *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_is_single (struct soap *, struct soap_plist *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_set_embedded (struct soap *, struct soap_plist *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_check_and_mark (struct soap *soap, const void *p, int t, char **mark)
 
SOAP_FMAC1 void *SOAP_FMAC2 soap_mark_lookup (struct soap *soap, const void *p, int t, struct soap_plist **pp, char **mark)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_mark_cycle (struct soap *soap, struct soap_plist *pp)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_mark_dup (struct soap *soap, void *a, struct soap_plist *pp)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_unmark (struct soap *soap, char *mark)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_begin_count (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_end_count (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_begin_send (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_end_send (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_end_send_flush (struct soap *)
 
SOAP_FMAC1 const struct soap_code_map *SOAP_FMAC2 soap_code (const struct soap_code_map *, const char *)
 
SOAP_FMAC1 LONG64 SOAP_FMAC2 soap_code_int (const struct soap_code_map *, const char *, LONG64)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_code_str (const struct soap_code_map *, long)
 
SOAP_FMAC1 LONG64 SOAP_FMAC2 soap_code_bits (const struct soap_code_map *, const char *)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_code_list (struct soap *, const struct soap_code_map *, long)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_binary_search_string (const char **, int, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_getline (struct soap *, char *, int)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_begin_serve (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_begin_recv (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_end_recv (struct soap *)
 
SOAP_FMAC1 void *SOAP_FMAC2 soap_malloc (struct soap *, size_t)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_dealloc (struct soap *, void *)
 
SOAP_FMAC1 struct soap_clist *SOAP_FMAC2 soap_link (struct soap *, int, int, int(*fdelete)(struct soap *, struct soap_clist *))
 
SOAP_FMAC1 int SOAP_FMAC2 soap_unlink (struct soap *, const void *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_free_temp (struct soap *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_del (struct soap *)
 
SOAP_FMAC1 void *SOAP_FMAC2 soap_track_malloc (struct soap *, const char *, int, size_t)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_track_free (struct soap *, const char *, int, void *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_lookup_type (struct soap *, const char *id)
 
SOAP_FMAC1 short SOAP_FMAC2 soap_begin_shaky (struct soap *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_end_shaky (struct soap *, short)
 
SOAP_FMAC1 void *SOAP_FMAC2 soap_id_lookup (struct soap *, const char *id, void **p, int t, size_t n, unsigned int k, int(*fbase)(int, int))
 
SOAP_FMAC1 void *SOAP_FMAC2 soap_id_forward (struct soap *, const char *id, void *p, size_t i, int t, int tt, size_t n, unsigned int k, void(*finsert)(struct soap *, int, int, void *, size_t, const void *, void **), int(*fbase)(int, int))
 
SOAP_FMAC1 int SOAP_FMAC2 soap_id_nullify (struct soap *, const char *)
 
SOAP_FMAC1 void *SOAP_FMAC2 soap_id_enter (struct soap *, const char *id, void *p, int t, size_t n, const char *type, const char *arrayType, void *(*finstantiate)(struct soap *, int, const char *, const char *, size_t *), int(*fbase)(int, int))
 
SOAP_FMAC1 void **SOAP_FMAC2 soap_id_smart (struct soap *soap, const char *, int t, size_t n)
 
SOAP_FMAC1 size_t SOAP_FMAC2 soap_size (const int *, int)
 
SOAP_FMAC1 size_t SOAP_FMAC2 soap_getsizes (const char *, int *, int)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_getoffsets (const char *, const int *, int *, int)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_getposition (const char *, int *)
 
SOAP_FMAC1 char *SOAP_FMAC2 soap_putsizesoffsets (struct soap *, const char *, const int *, const int *, int)
 
SOAP_FMAC1 char *SOAP_FMAC2 soap_putoffsets (struct soap *, const int *, int)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_closesock (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_force_closesock (struct soap *)
 
SOAP_FMAC1 struct soap *SOAP_FMAC2 soap_versioning() soap_new (soap_mode, soap_mode)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_free (struct soap *)
 
SOAP_FMAC1 struct soap *SOAP_FMAC2 soap_copy (const struct soap *)
 
SOAP_FMAC1 struct soap *SOAP_FMAC2 soap_copy_context (struct soap *, const struct soap *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_copy_stream (struct soap *, struct soap *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_free_stream (struct soap *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_versioning() soap_init (struct soap *, soap_mode, soap_mode)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_initialize (struct soap *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_done (struct soap *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_cleanup (struct soap *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_begin (struct soap *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_end (struct soap *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_delete (struct soap *, void *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_delegate_deletion (struct soap *, struct soap *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_set_recv_logfile (struct soap *, const char *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_set_sent_logfile (struct soap *, const char *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_set_test_logfile (struct soap *, const char *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_close_logfiles (struct soap *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_open_logfile (struct soap *, int)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_value (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_match_tag (struct soap *, const char *, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_match_att (struct soap *, const char *, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_match_array (struct soap *, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_element (struct soap *, const char *, int, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_element_start_end_out (struct soap *, const char *tag)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_element_begin_out (struct soap *, const char *tag, int id, const char *type)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_array_begin_out (struct soap *, const char *tag, int id, const char *type, const char *offset)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_element_ref (struct soap *, const char *tag, int id, int href)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_element_href (struct soap *, const char *tag, int id, const char *ref, const char *val)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_element_null (struct soap *, const char *tag, int id, const char *type)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_element_empty (struct soap *, const char *tag)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_element_nil (struct soap *, const char *tag)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_element_id (struct soap *, const char *tag, int id, const void *p, const void *a, int n, const char *type, int t, char **mark)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_element_result (struct soap *, const char *tag)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_check_result (struct soap *, const char *tag)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_element_end_out (struct soap *, const char *tag)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_element_end (struct soap *, const char *tag)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_attribute (struct soap *, const char *, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_element_begin_in (struct soap *, const char *tag, int nillable, const char *type)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_element_end_in (struct soap *, const char *tag)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_peek_element (struct soap *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_retry (struct soap *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_revert (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_ignore (struct soap *)
 
SOAP_FMAC1 void *SOAP_FMAC2 soap_memdup (struct soap *, const void *, size_t)
 
SOAP_FMAC1 char *SOAP_FMAC2 soap_strdup (struct soap *, const char *)
 
SOAP_FMAC1 wchar_t *SOAP_FMAC2 soap_wstrdup (struct soap *, const wchar_t *)
 
SOAP_FMAC1 char *SOAP_FMAC2 soap_strtrim (struct soap *, char *)
 
SOAP_FMAC1 wchar_t *SOAP_FMAC2 soap_wstrtrim (struct soap *, wchar_t *)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_tagsearch (const char *big, const char *little)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_string_out (struct soap *, const char *s, int flag)
 
SOAP_FMAC1 char *SOAP_FMAC2 soap_string_in (struct soap *, int, long, long, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_wstring_out (struct soap *, const wchar_t *s, int flag)
 
SOAP_FMAC1 wchar_t *SOAP_FMAC2 soap_wstring_in (struct soap *, int, long, long, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_match_namespace (struct soap *, const char *, const char *, size_t n1, size_t n2)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_set_version (struct soap *, short)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_set_namespaces (struct soap *, const struct Namespace *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_set_local_namespaces (struct soap *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_pop_namespace (struct soap *)
 
SOAP_FMAC1 struct soap_nlist *SOAP_FMAC2 soap_push_namespace (struct soap *, const char *, const char *)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_current_namespace_tag (struct soap *soap, const char *tag)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_current_namespace_att (struct soap *soap, const char *tag)
 
SOAP_FMAC1 struct soap_nlist *SOAP_FMAC2 soap_lookup_ns (struct soap *soap, const char *tag, size_t n)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_store_lab (struct soap *, const char *, size_t)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_append_lab (struct soap *, const char *, size_t)
 
SOAP_FMAC1 struct soap_blist *SOAP_FMAC2 soap_alloc_block (struct soap *)
 
SOAP_FMAC1 void *SOAP_FMAC2 soap_push_block (struct soap *, struct soap_blist *, size_t)
 
SOAP_FMAC1 void *SOAP_FMAC2 soap_push_block_max (struct soap *, struct soap_blist *, size_t)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_pop_block (struct soap *, struct soap_blist *)
 
SOAP_FMAC1 size_t SOAP_FMAC2 soap_size_block (struct soap *, struct soap_blist *, size_t)
 
SOAP_FMAC1 char *SOAP_FMAC2 soap_first_block (struct soap *, struct soap_blist *)
 
SOAP_FMAC1 char *SOAP_FMAC2 soap_next_block (struct soap *, struct soap_blist *)
 
SOAP_FMAC1 size_t SOAP_FMAC2 soap_block_size (struct soap *, struct soap_blist *)
 
SOAP_FMAC1 char *SOAP_FMAC2 soap_save_block (struct soap *, struct soap_blist *, char *, int)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_end_block (struct soap *, struct soap_blist *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_update_pointers (struct soap *soap, const char *dst, const char *src, size_t len)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_begin_out (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_end_out (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_http_has_body (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_http_skip_body (struct soap *)
 
SOAP_FMAC1 char *SOAP_FMAC2 soap_http_get_body (struct soap *, size_t *len)
 
SOAP_FMAC1 char *SOAP_FMAC2 soap_http_get_form (struct soap *)
 
SOAP_FMAC1 char *SOAP_FMAC2 soap_http_get_body_prefix (struct soap *, size_t *len, const char *prefix)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_begin_in (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_end_in (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_body_begin_out (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_body_end_out (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_body_begin_in (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_body_end_in (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_recv_header (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_response (struct soap *, int)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_send_empty_response (struct soap *, int status)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_recv_empty_response (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_send_fault (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_recv_fault (struct soap *, int check)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_print_fault (struct soap *, FILE *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_print_fault_location (struct soap *, FILE *)
 
SOAP_FMAC1 char *SOAP_FMAC2 soap_sprint_fault (struct soap *, char *, size_t)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_s2byte (struct soap *, const char *, char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_s2short (struct soap *, const char *, short *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_s2int (struct soap *, const char *, int *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_s2long (struct soap *, const char *, long *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_s2LONG64 (struct soap *, const char *, LONG64 *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_s2float (struct soap *, const char *, float *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_s2double (struct soap *, const char *, double *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedByte (struct soap *, const char *, unsigned char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedShort (struct soap *, const char *, unsigned short *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedInt (struct soap *, const char *, unsigned int *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedLong (struct soap *, const char *, unsigned long *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_s2ULONG64 (struct soap *, const char *, ULONG64 *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_s2char (struct soap *, const char *, char **, int, long minlen, long maxlen, const char *pattern)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_s2QName (struct soap *, const char *, char **, long minlen, long maxlen, const char *pattern)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_s2wchar (struct soap *, const char *, wchar_t **, int, long minlen, long maxlen, const char *pattern)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_s2dateTime (struct soap *, const char *, time_t *)
 
SOAP_FMAC1 char *SOAP_FMAC2 soap_s2base64 (struct soap *, const unsigned char *, char *, int)
 
SOAP_FMAC1 char *SOAP_FMAC2 soap_s2hex (struct soap *, const unsigned char *, char *, int)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_byte2s (struct soap *, char)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_short2s (struct soap *, short)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_int2s (struct soap *, int)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_long2s (struct soap *, long)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_LONG642s (struct soap *, LONG64)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_float2s (struct soap *, float)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_double2s (struct soap *, double)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_unsignedByte2s (struct soap *, unsigned char)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_unsignedShort2s (struct soap *, unsigned short)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_unsignedInt2s (struct soap *, unsigned int)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_unsignedLong2s (struct soap *, unsigned long)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_ULONG642s (struct soap *, ULONG64)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_QName2s (struct soap *, const char *)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_wchar2s (struct soap *, const wchar_t *)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_dateTime2s (struct soap *, time_t)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_base642s (struct soap *, const char *, char *, size_t, int *)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_hex2s (struct soap *, const char *, char *, size_t, int *)
 
SOAP_FMAC1 int *SOAP_FMAC2 soap_inint (struct soap *, const char *tag, int *p, const char *, int)
 
SOAP_FMAC1 char *SOAP_FMAC2 soap_inbyte (struct soap *, const char *tag, char *p, const char *, int)
 
SOAP_FMAC1 long *SOAP_FMAC2 soap_inlong (struct soap *, const char *tag, long *p, const char *, int)
 
SOAP_FMAC1 LONG64 *SOAP_FMAC2 soap_inLONG64 (struct soap *, const char *tag, LONG64 *p, const char *, int)
 
SOAP_FMAC1 short *SOAP_FMAC2 soap_inshort (struct soap *, const char *tag, short *p, const char *, int)
 
SOAP_FMAC1 float *SOAP_FMAC2 soap_infloat (struct soap *, const char *tag, float *p, const char *, int)
 
SOAP_FMAC1 double *SOAP_FMAC2 soap_indouble (struct soap *, const char *tag, double *p, const char *, int)
 
SOAP_FMAC1 unsigned char *SOAP_FMAC2 soap_inunsignedByte (struct soap *, const char *tag, unsigned char *p, const char *, int)
 
SOAP_FMAC1 unsigned short *SOAP_FMAC2 soap_inunsignedShort (struct soap *, const char *tag, unsigned short *p, const char *, int)
 
SOAP_FMAC1 unsigned int *SOAP_FMAC2 soap_inunsignedInt (struct soap *, const char *tag, unsigned int *p, const char *, int)
 
SOAP_FMAC1 unsigned long *SOAP_FMAC2 soap_inunsignedLong (struct soap *, const char *tag, unsigned long *p, const char *, int)
 
SOAP_FMAC1 ULONG64 *SOAP_FMAC2 soap_inULONG64 (struct soap *, const char *tag, ULONG64 *p, const char *, int)
 
SOAP_FMAC1 char **SOAP_FMAC2 soap_instring (struct soap *, const char *tag, char **p, const char *, int, int, long, long, const char *)
 
SOAP_FMAC1 char **SOAP_FMAC2 soap_inliteral (struct soap *, const char *tag, char **p)
 
SOAP_FMAC1 time_t *SOAP_FMAC2 soap_indateTime (struct soap *, const char *tag, time_t *p, const char *, int)
 
SOAP_FMAC1 time_t SOAP_FMAC2 soap_timegm (struct tm *)
 
SOAP_FMAC1 wchar_t **SOAP_FMAC2 soap_inwstring (struct soap *, const char *tag, wchar_t **p, const char *, int, int, long, long, const char *)
 
SOAP_FMAC1 wchar_t **SOAP_FMAC2 soap_inwliteral (struct soap *, const char *tag, wchar_t **p)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_outbyte (struct soap *, const char *tag, int id, const char *p, const char *, int)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_outshort (struct soap *, const char *tag, int id, const short *p, const char *, int)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_outint (struct soap *, const char *tag, int id, const int *p, const char *, int)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_outlong (struct soap *, const char *tag, int id, const long *p, const char *, int)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_outLONG64 (struct soap *, const char *tag, int id, const LONG64 *p, const char *, int)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_outfloat (struct soap *, const char *tag, int id, const float *p, const char *, int)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_outdouble (struct soap *, const char *tag, int id, const double *p, const char *, int)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedByte (struct soap *, const char *tag, int id, const unsigned char *p, const char *, int)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedShort (struct soap *, const char *tag, int id, const unsigned short *p, const char *, int)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedInt (struct soap *, const char *tag, int id, const unsigned int *p, const char *, int)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedLong (struct soap *, const char *tag, int id, const unsigned long *p, const char *, int)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_outULONG64 (struct soap *, const char *tag, int id, const ULONG64 *p, const char *, int)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_outstring (struct soap *, const char *tag, int id, char *const *p, const char *, int)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_outliteral (struct soap *, const char *tag, char *const *p, const char *type)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_outdateTime (struct soap *, const char *tag, int id, const time_t *p, const char *, int)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_outwstring (struct soap *, const char *tag, int id, wchar_t *const *p, const char *, int)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_outwliteral (struct soap *, const char *tag, wchar_t *const *p, const char *type)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_attachment (struct soap *, const char *, int, const void *, const void *, int, const char *, const char *, const char *, const char *, int)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_move (struct soap *, ULONG64)
 
SOAP_FMAC1 ULONG64 SOAP_FMAC2 soap_tell (struct soap *)
 
SOAP_FMAC1 char *SOAP_FMAC2 soap_dime_option (struct soap *, unsigned short, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_getdimehdr (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_getdime (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_putdimehdr (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_putdime (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_getmimehdr (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_getmime (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_putmimehdr (struct soap *, struct soap_multipart *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_putmime (struct soap *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_set_dime (struct soap *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_set_mime (struct soap *, const char *boundary, const char *start)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_clr_dime (struct soap *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_clr_mime (struct soap *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_set_dime_attachment (struct soap *, const char *ptr, size_t size, const char *type, const char *id, unsigned short optype, const char *option)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_set_mime_attachment (struct soap *, const char *ptr, size_t size, enum soap_mime_encoding encoding, const char *type, const char *id, const char *location, const char *description)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_post_check_mime_attachments (struct soap *soap)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_check_mime_attachments (struct soap *soap)
 
SOAP_FMAC1 struct soap_multipart *SOAP_FMAC2 soap_recv_mime_attachment (struct soap *soap, void *handle)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_match_cid (struct soap *, const char *, const char *)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_rand_uuid (struct soap *, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_register_plugin_arg (struct soap *, int(*fcreate)(struct soap *, struct soap_plugin *, void *), void *)
 
SOAP_FMAC1 void *SOAP_FMAC2 soap_lookup_plugin (struct soap *, const char *)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_attr_value (struct soap *soap, const char *name, int flag, int occurs)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_set_attr (struct soap *soap, const char *name, const char *value, int flag)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_clr_attr (struct soap *soap)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_extend_url (struct soap *soap, const char *, const char *)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_extend_url_query (struct soap *soap, const char *, const char *)
 
SOAP_FMAC1 void SOAP_FMAC2 soap_url_query (struct soap *soap, const char *, const char *)
 
SOAP_FMAC1 int SOAP_FMAC2 soap_encode_url (const char *, char *, int)
 
SOAP_FMAC1 const char *SOAP_FMAC2 soap_encode_url_string (struct soap *, const char *)
 
SOAP_FMAC3 void SOAP_FMAC4 soap_header (struct soap *)
 
SOAP_FMAC3 void SOAP_FMAC4 soap_fault (struct soap *)
 
SOAP_FMAC3 const char **SOAP_FMAC4 soap_faultcode (struct soap *)
 
SOAP_FMAC3 const char **SOAP_FMAC4 soap_faultsubcode (struct soap *)
 
SOAP_FMAC3 const char **SOAP_FMAC4 soap_faultstring (struct soap *)
 
SOAP_FMAC3 const char **SOAP_FMAC4 soap_faultdetail (struct soap *)
 
SOAP_FMAC3 const char *SOAP_FMAC4 soap_fault_subcode (struct soap *)
 
SOAP_FMAC3 const char *SOAP_FMAC4 soap_fault_string (struct soap *)
 
SOAP_FMAC3 const char *SOAP_FMAC4 soap_fault_detail (struct soap *)
 
SOAP_FMAC3 void SOAP_FMAC4 soap_serializefault (struct soap *)
 
SOAP_FMAC3 void SOAP_FMAC4 soap_serializeheader (struct soap *)
 
SOAP_FMAC3 int SOAP_FMAC4 soap_getheader (struct soap *)
 
SOAP_FMAC3 int SOAP_FMAC4 soap_putheader (struct soap *)
 
SOAP_FMAC3 int SOAP_FMAC4 soap_getfault (struct soap *)
 
SOAP_FMAC3 int SOAP_FMAC4 soap_putfault (struct soap *)
 

Variables

const union soap_double_nan soap_double_nan
 
const char soap_base64o []
 
const char soap_base64i []
 
struct SOAP_CMAC soap
 
struct SOAP_CMAC soap_dom_element
 
struct SOAP_CMAC soap_dom_attribute
 
SOAP_NMAC struct Namespace namespaces []
 

Macro Definition Documentation

◆ _REENTRANT

#define _REENTRANT

Definition at line 67 of file stdsoap2.h.

◆ _THREAD_SAFE

#define _THREAD_SAFE

Definition at line 62 of file stdsoap2.h.

◆ DBGFUN

#define DBGFUN (   FNAME)

Definition at line 1985 of file stdsoap2.h.

◆ DBGFUN1

#define DBGFUN1 (   FNAME,
  FMT,
  ARG 
)

Definition at line 1986 of file stdsoap2.h.

◆ DBGFUN2

#define DBGFUN2 (   FNAME,
  FMT1,
  ARG1,
  FMT2,
  ARG2 
)

Definition at line 1987 of file stdsoap2.h.

◆ DBGFUN3

#define DBGFUN3 (   FNAME,
  FMT1,
  ARG1,
  FMT2,
  ARG2,
  FMT3,
  ARG3 
)

Definition at line 1988 of file stdsoap2.h.

◆ DBGFUN4

#define DBGFUN4 (   FNAME,
  FMT1,
  ARG1,
  FMT2,
  ARG2,
  FMT3,
  ARG3,
  FMT4,
  ARG4 
)

Definition at line 1989 of file stdsoap2.h.

◆ DBGHEX

#define DBGHEX (   DBGFILE,
  MSG,
  LEN 
)

Definition at line 1990 of file stdsoap2.h.

◆ DBGLOG

#define DBGLOG (   DBGFILE,
  CMD 
)

Definition at line 1983 of file stdsoap2.h.

◆ DBGMSG

#define DBGMSG (   DBGFILE,
  MSG,
  LEN 
)

Definition at line 1984 of file stdsoap2.h.

◆ DBL_NAN

#define DBL_NAN   (soap_double_nan.dv)

Definition at line 1412 of file stdsoap2.h.

◆ DBL_NINFTY

#define DBL_NINFTY   (-DBL_PINFTY)

Definition at line 1432 of file stdsoap2.h.

◆ DBL_PINFTY

#define DBL_PINFTY   (1.7976931348623157e+308)

Definition at line 1427 of file stdsoap2.h.

◆ FD_SETSIZE

#define FD_SETSIZE   (1024)

Definition at line 1006 of file stdsoap2.h.

◆ FLT_NAN

#define FLT_NAN   (soap_double_nan.fv)

Definition at line 1388 of file stdsoap2.h.

◆ FLT_NINFTY

#define FLT_NINFTY   (-FLT_PINFTY)

Definition at line 1408 of file stdsoap2.h.

◆ FLT_PINFTY

#define FLT_PINFTY   (3.40282347e+38F)

Definition at line 1403 of file stdsoap2.h.

◆ GSOAP_VERSION

#define GSOAP_VERSION   208105

Definition at line 55 of file stdsoap2.h.

◆ HAVE_ASCTIME_R

#define HAVE_ASCTIME_R

Definition at line 574 of file stdsoap2.h.

◆ HAVE_GETHOSTBYNAME_R

#define HAVE_GETHOSTBYNAME_R

Definition at line 572 of file stdsoap2.h.

◆ HAVE_GETTIMEOFDAY

#define HAVE_GETTIMEOFDAY

Definition at line 570 of file stdsoap2.h.

◆ HAVE_GMTIME_R

#define HAVE_GMTIME_R

Definition at line 573 of file stdsoap2.h.

◆ HAVE_LOCALE_H

#define HAVE_LOCALE_H

Definition at line 577 of file stdsoap2.h.

◆ HAVE_LOCALTIME_R

#define HAVE_LOCALTIME_R

Definition at line 575 of file stdsoap2.h.

◆ HAVE_RAND_R

#define HAVE_RAND_R

Definition at line 571 of file stdsoap2.h.

◆ HAVE_SNPRINTF

#define HAVE_SNPRINTF

Definition at line 562 of file stdsoap2.h.

◆ HAVE_SSCANF

#define HAVE_SSCANF

Definition at line 565 of file stdsoap2.h.

◆ HAVE_STRERROR_R

#define HAVE_STRERROR_R

Definition at line 576 of file stdsoap2.h.

◆ HAVE_STRRCHR

#define HAVE_STRRCHR

Definition at line 563 of file stdsoap2.h.

◆ HAVE_STRTOD

#define HAVE_STRTOD

Definition at line 564 of file stdsoap2.h.

◆ HAVE_STRTOL

#define HAVE_STRTOL

Definition at line 566 of file stdsoap2.h.

◆ HAVE_STRTOLL

#define HAVE_STRTOLL

Definition at line 568 of file stdsoap2.h.

◆ HAVE_STRTOUL

#define HAVE_STRTOUL

Definition at line 567 of file stdsoap2.h.

◆ HAVE_STRTOULL

#define HAVE_STRTOULL

Definition at line 569 of file stdsoap2.h.

◆ LONG64

#define LONG64   long long

Definition at line 1085 of file stdsoap2.h.

◆ SOAP_BASEREFNAME

#define SOAP_BASEREFNAME   "_"

Definition at line 1256 of file stdsoap2.h.

◆ SOAP_BEGIN_RECV

#define SOAP_BEGIN_RECV   2

Definition at line 1778 of file stdsoap2.h.

◆ SOAP_BEGIN_SEND

#define SOAP_BEGIN_SEND   1

Definition at line 1777 of file stdsoap2.h.

◆ SOAP_BINARY_BUFLEN

#define SOAP_BINARY_BUFLEN   (128)

Definition at line 631 of file stdsoap2.h.

◆ SOAP_BLKLEN

#define SOAP_BLKLEN   (256) /* to collect long strings and XML attributes */

Definition at line 1197 of file stdsoap2.h.

◆ SOAP_BUFLEN

#define SOAP_BUFLEN   (65536) /* buffer length for socket packets, so don't make this too small */

Definition at line 1170 of file stdsoap2.h.

◆ SOAP_C_MBSTRING

#define SOAP_C_MBSTRING   0x04000000 /* (de)serialize strings with multi-byte content */

Definition at line 1726 of file stdsoap2.h.

◆ SOAP_C_NILSTRING

#define SOAP_C_NILSTRING   0x08000000 /* serialize empty strings as nil (omitted) */

Definition at line 1727 of file stdsoap2.h.

◆ SOAP_C_NOIOB

#define SOAP_C_NOIOB   0x01000000 /* don't fault on array index out of bounds (just ignore) */

Definition at line 1724 of file stdsoap2.h.

◆ SOAP_C_UTFSTRING

#define SOAP_C_UTFSTRING   0x02000000 /* (de)serialize strings with UTF8 content */

Definition at line 1725 of file stdsoap2.h.

◆ soap_check_state

#define soap_check_state (   soap)    (!(soap) || ((soap)->state != SOAP_INIT && (soap)->state != SOAP_COPY))

Definition at line 1772 of file stdsoap2.h.

◆ SOAP_CHK_EOF

#define SOAP_CHK_EOF   (soap->error ? soap->error : SOAP_EOF)

Definition at line 1012 of file stdsoap2.h.

◆ SOAP_CLI_FAULT

#define SOAP_CLI_FAULT   1

Definition at line 1529 of file stdsoap2.h.

◆ soap_closesocket

#define soap_closesocket (   n)    close(n)

Definition at line 991 of file stdsoap2.h.

◆ soap_clr_imode

#define soap_clr_imode (   soap,
 
)    ((soap)->imode &= ~(n))

Definition at line 3066 of file stdsoap2.h.

◆ soap_clr_mode

#define soap_clr_mode (   soap,
 
)    ((soap)->mode &= ~(n), (soap)->imode &= ~(n), (soap)->omode &= ~(n))

Definition at line 3070 of file stdsoap2.h.

◆ soap_clr_omode

#define soap_clr_omode (   soap,
 
)    ((soap)->omode &= ~(n))

Definition at line 3068 of file stdsoap2.h.

◆ SOAP_CMAC

#define SOAP_CMAC

Definition at line 137 of file stdsoap2.h.

◆ SOAP_CONNECT

#define SOAP_CONNECT   2008 /* CONNECT request */

Definition at line 1667 of file stdsoap2.h.

◆ SOAP_COPY

#define SOAP_COPY   2

Definition at line 1770 of file stdsoap2.h.

◆ SOAP_DATAENCODINGUNKNOWN

#define SOAP_DATAENCODINGUNKNOWN   41 /* unused */

Definition at line 1569 of file stdsoap2.h.

◆ SOAP_DEL

#define SOAP_DEL   2005 /* DELETE request */

Definition at line 1664 of file stdsoap2.h.

◆ SOAP_DEL_METHOD

#define SOAP_DEL_METHOD   18

Definition at line 1546 of file stdsoap2.h.

◆ SOAP_DELETE

#define SOAP_DELETE (   soap,
  obj,
  type 
)    delete obj

Definition at line 1881 of file stdsoap2.h.

◆ SOAP_DELETE_ARRAY

#define SOAP_DELETE_ARRAY (   soap,
  obj,
  type 
)    delete[] obj

Definition at line 1885 of file stdsoap2.h.

◆ SOAP_DELETE_UNMANAGED

#define SOAP_DELETE_UNMANAGED (   soap)    delete soap

Definition at line 1893 of file stdsoap2.h.

◆ soap_destroy

#define soap_destroy (   soap)    soap_delete((soap), NULL)

Definition at line 3071 of file stdsoap2.h.

◆ SOAP_DIME_ABSURI

#define SOAP_DIME_ABSURI   0x20

Definition at line 1676 of file stdsoap2.h.

◆ SOAP_DIME_CF

#define SOAP_DIME_CF   0x01

Definition at line 1671 of file stdsoap2.h.

◆ SOAP_DIME_END

#define SOAP_DIME_END   35

Definition at line 1563 of file stdsoap2.h.

◆ SOAP_DIME_ERROR

#define SOAP_DIME_ERROR   32

Definition at line 1560 of file stdsoap2.h.

◆ soap_dime_error_check

#define soap_dime_error_check (   e)
Value:
((e) == SOAP_DIME_ERROR || \
(e) == SOAP_DIME_HREF || \
(e) == SOAP_DIME_MISMATCH || \
(e) == SOAP_DIME_END)
#define SOAP_DIME_MISMATCH
Definition: stdsoap2.h:1562
#define SOAP_DIME_HREF
Definition: stdsoap2.h:1561
#define SOAP_DIME_ERROR
Definition: stdsoap2.h:1560
#define SOAP_DIME_END
Definition: stdsoap2.h:1563

Definition at line 1621 of file stdsoap2.h.

◆ SOAP_DIME_HREF

#define SOAP_DIME_HREF   33

Definition at line 1561 of file stdsoap2.h.

◆ SOAP_DIME_MB

#define SOAP_DIME_MB   0x04

Definition at line 1673 of file stdsoap2.h.

◆ SOAP_DIME_ME

#define SOAP_DIME_ME   0x02

Definition at line 1672 of file stdsoap2.h.

◆ SOAP_DIME_MEDIA

#define SOAP_DIME_MEDIA   0x10

Definition at line 1675 of file stdsoap2.h.

◆ SOAP_DIME_MISMATCH

#define SOAP_DIME_MISMATCH   34

Definition at line 1562 of file stdsoap2.h.

◆ SOAP_DIME_VERSION

#define SOAP_DIME_VERSION   0x08 /* DIME version 1 */

Definition at line 1674 of file stdsoap2.h.

◆ SOAP_DOM_ASIS

#define SOAP_DOM_ASIS   0x00400000

Definition at line 1720 of file stdsoap2.h.

◆ SOAP_DOM_NODE

#define SOAP_DOM_NODE   0x00200000

Definition at line 1719 of file stdsoap2.h.

◆ SOAP_DOM_TREE

#define SOAP_DOM_TREE   0x00100000 /* see DOM manual */

Definition at line 1718 of file stdsoap2.h.

◆ SOAP_DUPLICATE_ID

#define SOAP_DUPLICATE_ID   24

Definition at line 1552 of file stdsoap2.h.

◆ SOAP_EADDRINUSE

#define SOAP_EADDRINUSE   EADDRINUSE

Definition at line 1135 of file stdsoap2.h.

◆ SOAP_EAGAIN

#define SOAP_EAGAIN   EAGAIN

Definition at line 1134 of file stdsoap2.h.

◆ SOAP_ECONNREFUSED

#define SOAP_ECONNREFUSED   ECONNREFUSED

Definition at line 1136 of file stdsoap2.h.

◆ SOAP_EINPROGRESS

#define SOAP_EINPROGRESS   EINPROGRESS

Definition at line 1142 of file stdsoap2.h.

◆ SOAP_EINTR

#define SOAP_EINTR   EINTR

Definition at line 1133 of file stdsoap2.h.

◆ SOAP_EMPTY

#define SOAP_EMPTY   52

Definition at line 1580 of file stdsoap2.h.

◆ SOAP_ENC

#define SOAP_ENC   0x00000FFF /* IO and ENC mask */

Definition at line 1699 of file stdsoap2.h.

◆ SOAP_ENC_DIME

#define SOAP_ENC_DIME   0x00000080

Definition at line 1703 of file stdsoap2.h.

◆ SOAP_ENC_LATIN

#define SOAP_ENC_LATIN   0x00000020 /* in: accept iso-8859-1 */

Definition at line 1700 of file stdsoap2.h.

◆ SOAP_ENC_MIME

#define SOAP_ENC_MIME   0x00000100

Definition at line 1704 of file stdsoap2.h.

◆ SOAP_ENC_MTOM

#define SOAP_ENC_MTOM   0x00000200

Definition at line 1705 of file stdsoap2.h.

◆ SOAP_ENC_PLAIN

#define SOAP_ENC_PLAIN   0x00000040 /* out: plain (XML or other) body, no HTTP header */

Definition at line 1701 of file stdsoap2.h.

◆ SOAP_ENC_SSL

#define SOAP_ENC_SSL   0x00000800

Definition at line 1707 of file stdsoap2.h.

◆ SOAP_ENC_XML

#define SOAP_ENC_XML   0x00000040 /* deprecated, alias for SOAP_ENC_PLAIN */

Definition at line 1702 of file stdsoap2.h.

◆ SOAP_ENC_ZLIB

#define SOAP_ENC_ZLIB   0x00000400

Definition at line 1706 of file stdsoap2.h.

◆ SOAP_END

#define SOAP_END   0

Definition at line 1776 of file stdsoap2.h.

◆ SOAP_END_BODY

#define SOAP_END_BODY   8

Definition at line 1784 of file stdsoap2.h.

◆ SOAP_END_ENVELOPE

#define SOAP_END_ENVELOPE   9

Definition at line 1785 of file stdsoap2.h.

◆ SOAP_END_HEADER

#define SOAP_END_HEADER   5

Definition at line 1781 of file stdsoap2.h.

◆ SOAP_END_TAG

#define SOAP_END_TAG   53

Definition at line 1581 of file stdsoap2.h.

◆ SOAP_EOF

#define SOAP_EOF   EOF

Definition at line 1527 of file stdsoap2.h.

◆ SOAP_EOM

#define SOAP_EOM   20

Definition at line 1548 of file stdsoap2.h.

◆ SOAP_ERANGE

#define SOAP_ERANGE   (34)

Definition at line 1131 of file stdsoap2.h.

◆ SOAP_ERR

#define SOAP_ERR   99

Definition at line 1582 of file stdsoap2.h.

◆ soap_errno

#define soap_errno   errno

Definition at line 1158 of file stdsoap2.h.

◆ SOAP_EWOULDBLOCK

#define SOAP_EWOULDBLOCK   EWOULDBLOCK

Definition at line 1141 of file stdsoap2.h.

◆ SOAP_FATAL_ERROR

#define SOAP_FATAL_ERROR   11 /* deprecated */

Definition at line 1539 of file stdsoap2.h.

◆ SOAP_FAULT

#define SOAP_FAULT   12

Definition at line 1540 of file stdsoap2.h.

◆ SOAP_FD_EXCEEDED

#define SOAP_FD_EXCEEDED   47

Definition at line 1575 of file stdsoap2.h.

◆ SOAP_FILE

#define SOAP_FILE   1200 /* Custom file-based response with soap::http_content and optional http status */

Definition at line 1653 of file stdsoap2.h.

◆ SOAP_FIXED

#define SOAP_FIXED   51

Definition at line 1579 of file stdsoap2.h.

◆ SOAP_FMAC1

#define SOAP_FMAC1

Definition at line 105 of file stdsoap2.h.

◆ SOAP_FMAC2

#define SOAP_FMAC2

Definition at line 109 of file stdsoap2.h.

◆ SOAP_FMAC3

#define SOAP_FMAC3

Definition at line 113 of file stdsoap2.h.

◆ SOAP_FMAC3S

#define SOAP_FMAC3S   SOAP_FMAC3

Definition at line 117 of file stdsoap2.h.

◆ SOAP_FMAC4

#define SOAP_FMAC4

Definition at line 121 of file stdsoap2.h.

◆ SOAP_FMAC4S

#define SOAP_FMAC4S   SOAP_FMAC4

Definition at line 125 of file stdsoap2.h.

◆ SOAP_FMAC5

#define SOAP_FMAC5

Definition at line 129 of file stdsoap2.h.

◆ SOAP_FMAC6

#define SOAP_FMAC6

Definition at line 133 of file stdsoap2.h.

◆ SOAP_FORM

#define SOAP_FORM   1001 /* Request (form) data is present, no HTTP response should follow */

Definition at line 1651 of file stdsoap2.h.

◆ SOAP_FREE

#define SOAP_FREE (   soap,
  ptr 
)    free((void*)(ptr))

Definition at line 1824 of file stdsoap2.h.

◆ SOAP_FREE_UNMANAGED

#define SOAP_FREE_UNMANAGED (   ptr)    free((void*)(ptr))

Definition at line 1832 of file stdsoap2.h.

◆ SOAP_FUNC_R_ERR

#define SOAP_FUNC_R_ERR   (NULL)

Definition at line 982 of file stdsoap2.h.

◆ SOAP_GAI_STRERROR

#define SOAP_GAI_STRERROR   gai_strerror

Definition at line 1002 of file stdsoap2.h.

◆ SOAP_GET

#define SOAP_GET   2002 /* GET request */

Definition at line 1661 of file stdsoap2.h.

◆ soap_get0

#define soap_get0 (   soap)    (((soap)->bufidx>=(soap)->buflen && soap_recv(soap)) ? EOF : (unsigned char)(soap)->buf[(soap)->bufidx])

Definition at line 3039 of file stdsoap2.h.

◆ soap_get1

#define soap_get1 (   soap)    (((soap)->bufidx>=(soap)->buflen && soap_recv(soap)) ? EOF : (unsigned char)(soap)->buf[(soap)->bufidx++])

Definition at line 3040 of file stdsoap2.h.

◆ SOAP_GET_METHOD

#define SOAP_GET_METHOD   15

Definition at line 1543 of file stdsoap2.h.

◆ SOAP_HDR

#define SOAP_HDR   22

Definition at line 1550 of file stdsoap2.h.

◆ SOAP_HDRLEN

#define SOAP_HDRLEN   (8192) /* maximum length of HTTP header line (must be >=4096 to read cookies) */

Definition at line 1211 of file stdsoap2.h.

◆ SOAP_HEAD

#define SOAP_HEAD   2006 /* HEAD request */

Definition at line 1665 of file stdsoap2.h.

◆ SOAP_HREF

#define SOAP_HREF   26

Definition at line 1554 of file stdsoap2.h.

◆ SOAP_HTML

#define SOAP_HTML   1002 /* Custom HTML response */

Definition at line 1652 of file stdsoap2.h.

◆ SOAP_HTTP_ERROR

#define SOAP_HTTP_ERROR   29

Definition at line 1557 of file stdsoap2.h.

◆ soap_http_error_check

#define soap_http_error_check (   e)
Value:
((e) == SOAP_HTTP_ERROR || \
(e) == SOAP_NO_DATA || \
((e) >= SOAP_GET_METHOD && (e) <= SOAP_HTTP_METHOD) || \
((e) >= 100 && (e) < 600))
#define SOAP_HTTP_METHOD
Definition: stdsoap2.h:1547
#define SOAP_NO_DATA
Definition: stdsoap2.h:1542
#define SOAP_GET_METHOD
Definition: stdsoap2.h:1543
#define SOAP_HTTP_ERROR
Definition: stdsoap2.h:1557

Definition at line 1615 of file stdsoap2.h.

◆ SOAP_HTTP_METHOD

#define SOAP_HTTP_METHOD   19

Definition at line 1547 of file stdsoap2.h.

◆ SOAP_IDHASH

#define SOAP_IDHASH   (1999) /* 1999, 8191: prime size of hash table for parsed id/ref */

Definition at line 1190 of file stdsoap2.h.

◆ soap_imode

#define soap_imode (   soap,
 
)    ((soap)->imode = (n))

Definition at line 3063 of file stdsoap2.h.

◆ SOAP_IN_BODY

#define SOAP_IN_BODY   7

Definition at line 1783 of file stdsoap2.h.

◆ SOAP_IN_ENVELOPE

#define SOAP_IN_ENVELOPE   3

Definition at line 1779 of file stdsoap2.h.

◆ SOAP_IN_HEADER

#define SOAP_IN_HEADER   4

Definition at line 1780 of file stdsoap2.h.

◆ SOAP_INDEX_RECV

#define SOAP_INDEX_RECV   (0)

Definition at line 1244 of file stdsoap2.h.

◆ SOAP_INDEX_SENT

#define SOAP_INDEX_SENT   (1)

Definition at line 1245 of file stdsoap2.h.

◆ SOAP_INDEX_TEST

#define SOAP_INDEX_TEST   (2)

Definition at line 1246 of file stdsoap2.h.

◆ SOAP_INIT

#define SOAP_INIT   1

Definition at line 1769 of file stdsoap2.h.

◆ soap_init

#define soap_init (   soap)    soap_init1(soap, SOAP_IO_DEFAULT)

Definition at line 3050 of file stdsoap2.h.

◆ soap_init1

#define soap_init1 (   soap,
  mode 
)    soap_init2(soap, mode, mode)

Definition at line 3051 of file stdsoap2.h.

◆ soap_init2

#define soap_init2 (   soap,
  imode,
  omode 
)    soap_versioning(soap_init)(soap, imode, omode)

Definition at line 3052 of file stdsoap2.h.

◆ soap_int32

#define soap_int32   int32_t

Definition at line 1116 of file stdsoap2.h.

◆ SOAP_INVALID_SOCKET

#define SOAP_INVALID_SOCKET   ((SOAP_SOCKET)-1)

Definition at line 995 of file stdsoap2.h.

◆ SOAP_IO

#define SOAP_IO   0x00000003 /* IO mask */

Definition at line 1689 of file stdsoap2.h.

◆ SOAP_IO_BUFFER

#define SOAP_IO_BUFFER   0x00000001 /* out: buffer output in packets of size SOAP_BUFLEN */

Definition at line 1691 of file stdsoap2.h.

◆ SOAP_IO_CHUNK

#define SOAP_IO_CHUNK   0x00000003 /* out: use HTTP chunked transfer AND buffer packets */

Definition at line 1693 of file stdsoap2.h.

◆ SOAP_IO_DEFAULT

#define SOAP_IO_DEFAULT   SOAP_IO_FLUSH

Definition at line 1740 of file stdsoap2.h.

◆ SOAP_IO_FLUSH

#define SOAP_IO_FLUSH   0x00000000 /* out: flush output immediately, no buffering */

Definition at line 1690 of file stdsoap2.h.

◆ SOAP_IO_KEEPALIVE

#define SOAP_IO_KEEPALIVE   0x00000010 /* out: keep connection alive */

Definition at line 1697 of file stdsoap2.h.

◆ SOAP_IO_LENGTH

#define SOAP_IO_LENGTH   0x00000008 /* out: calc message length (internal) */

Definition at line 1696 of file stdsoap2.h.

◆ SOAP_IO_STORE

#define SOAP_IO_STORE   0x00000002 /* out: store entire output to determine length for transport */

Definition at line 1692 of file stdsoap2.h.

◆ SOAP_IO_UDP

#define SOAP_IO_UDP   0x00000004 /* in/out: enable UDP instead of TCP */

Definition at line 1695 of file stdsoap2.h.

◆ SOAP_IOB

#define SOAP_IOB   7

Definition at line 1535 of file stdsoap2.h.

◆ soap_isinf

#define soap_isinf (   n)    (!soap_isnan(n) && soap_isnan((n) - (n)))

Definition at line 1447 of file stdsoap2.h.

◆ soap_isnan

#define soap_isnan (   n)    ((n) != (n))

Definition at line 1439 of file stdsoap2.h.

◆ soap_isninfd

#define soap_isninfd (   n)    ((n) < 0 && soap_isinf(n))

Definition at line 1453 of file stdsoap2.h.

◆ soap_isninff

#define soap_isninff (   n)    ((n) < 0 && soap_isinf(n))

Definition at line 1454 of file stdsoap2.h.

◆ soap_ispinfd

#define soap_ispinfd (   n)    ((n) > 0 && soap_isinf(n))

Definition at line 1451 of file stdsoap2.h.

◆ soap_ispinff

#define soap_ispinff (   n)    ((n) > 0 && soap_isinf(n))

Definition at line 1452 of file stdsoap2.h.

◆ SOAP_LABLEN

#define SOAP_LABLEN   (256) /* initial look-aside buffer length */

Definition at line 1176 of file stdsoap2.h.

◆ SOAP_LENGTH

#define SOAP_LENGTH   45

Definition at line 1573 of file stdsoap2.h.

◆ SOAP_LEVEL

#define SOAP_LEVEL   50

Definition at line 1578 of file stdsoap2.h.

◆ SOAP_LONG_FORMAT

#define SOAP_LONG_FORMAT   "%lld" /* printf format for 64 bit long long ints */

Definition at line 1098 of file stdsoap2.h.

◆ SOAP_MALLOC

#define SOAP_MALLOC (   soap,
  size 
)    malloc((size))

Definition at line 1820 of file stdsoap2.h.

◆ SOAP_MALLOC_UNMANAGED

#define SOAP_MALLOC_UNMANAGED (   size)    malloc((size))

Definition at line 1828 of file stdsoap2.h.

◆ SOAP_MAXALLOCSIZE

#define SOAP_MAXALLOCSIZE   (0) /* max size that malloc() can handle, zero for no limit */

Definition at line 1239 of file stdsoap2.h.

◆ SOAP_MAXARRAYSIZE

#define SOAP_MAXARRAYSIZE   (100000)

Definition at line 1276 of file stdsoap2.h.

◆ SOAP_MAXDIMESIZE

#define SOAP_MAXDIMESIZE   (8*1048576) /* 8 MB */

Definition at line 1285 of file stdsoap2.h.

◆ SOAP_MAXDIMS

#define SOAP_MAXDIMS   (16) /* maximum array dimensions (array nestings) must be less than 64 to protect soap->tmpbuf */

Definition at line 1225 of file stdsoap2.h.

◆ SOAP_MAXEINTR

#define SOAP_MAXEINTR   (10)

Definition at line 1262 of file stdsoap2.h.

◆ SOAP_MAXINFLATESIZE

#define SOAP_MAXINFLATESIZE   (1*1048576) /* 1 MB */

Definition at line 1294 of file stdsoap2.h.

◆ SOAP_MAXKEEPALIVE

#define SOAP_MAXKEEPALIVE   (100)

Definition at line 1267 of file stdsoap2.h.

◆ SOAP_MAXLENGTH

#define SOAP_MAXLENGTH   (0)

Definition at line 1318 of file stdsoap2.h.

◆ SOAP_MAXLEVEL

#define SOAP_MAXLEVEL   (10000)

Definition at line 1313 of file stdsoap2.h.

◆ SOAP_MAXLOGS

#define SOAP_MAXLOGS   (3) /* max number of debug logs per struct soap environment */

Definition at line 1243 of file stdsoap2.h.

◆ SOAP_MAXOCCURS

#define SOAP_MAXOCCURS   (100000)

Definition at line 1323 of file stdsoap2.h.

◆ SOAP_MAXPTRS

#define SOAP_MAXPTRS   (4) /* maximum depth + 1 of id-ref deserialized pointer types (int* has depth 0, int*** has depth 2) */

Definition at line 1232 of file stdsoap2.h.

◆ soap_memcpy

#define soap_memcpy (   buf,
  len,
  src,
  num 
)    ((size_t)(len) >= (size_t)(num) ? !memcpy((buf), (src), (num)) : SOAP_ERANGE)

Definition at line 1513 of file stdsoap2.h.

◆ soap_memmove

#define soap_memmove (   buf,
  len,
  src,
  num 
)    ((size_t)(len) >= (size_t)(num) ? !memmove((buf), (src), (num)) : SOAP_ERANGE)

Definition at line 1520 of file stdsoap2.h.

◆ SOAP_MIME_END

#define SOAP_MIME_END   38

Definition at line 1566 of file stdsoap2.h.

◆ SOAP_MIME_ERROR

#define SOAP_MIME_ERROR   36

Definition at line 1564 of file stdsoap2.h.

◆ soap_mime_error_check

#define soap_mime_error_check (   e)
Value:
((e) == SOAP_MIME_ERROR || \
(e) == SOAP_MIME_HREF || \
(e) == SOAP_MIME_END)
#define SOAP_MIME_ERROR
Definition: stdsoap2.h:1564
#define SOAP_MIME_END
Definition: stdsoap2.h:1566
#define SOAP_MIME_HREF
Definition: stdsoap2.h:1565

Definition at line 1627 of file stdsoap2.h.

◆ SOAP_MIME_HREF

#define SOAP_MIME_HREF   37

Definition at line 1565 of file stdsoap2.h.

◆ SOAP_MIME_POSTCHECK

#define SOAP_MIME_POSTCHECK   0x40000000 /* MIME flag (internal) */

Definition at line 1732 of file stdsoap2.h.

◆ SOAP_MINDEFLATERATIO

#define SOAP_MINDEFLATERATIO   (1.0/1032.0) /* ratio of deflated/inflated */

Definition at line 1308 of file stdsoap2.h.

◆ SOAP_MISSING_ID

#define SOAP_MISSING_ID   25

Definition at line 1553 of file stdsoap2.h.

◆ soap_mode

#define soap_mode (   soap,
 
)    ((soap)->mode = (soap)->imode = (soap)->omode = (n))

Definition at line 3062 of file stdsoap2.h.

◆ SOAP_MOE

#define SOAP_MOE   21

Definition at line 1549 of file stdsoap2.h.

◆ SOAP_MULTIREFTAG

#define SOAP_MULTIREFTAG   "id"

Definition at line 1251 of file stdsoap2.h.

◆ SOAP_MUSTUNDERSTAND

#define SOAP_MUSTUNDERSTAND   8

Definition at line 1536 of file stdsoap2.h.

◆ SOAP_NAMESPACE

#define SOAP_NAMESPACE   9

Definition at line 1537 of file stdsoap2.h.

◆ soap_new

#define soap_new ( )    soap_new1(SOAP_IO_DEFAULT)

Definition at line 3054 of file stdsoap2.h.

◆ SOAP_NEW

#define SOAP_NEW (   soap,
  type 
)    new SOAP_NOTHROW (type)

Definition at line 1870 of file stdsoap2.h.

◆ soap_new1

#define soap_new1 (   mode)    soap_new2(mode, mode)

Definition at line 3055 of file stdsoap2.h.

◆ soap_new2

#define soap_new2 (   imode,
  omode 
)    soap_versioning(soap_new)(imode, omode)

Definition at line 3056 of file stdsoap2.h.

◆ SOAP_NEW_ARRAY

#define SOAP_NEW_ARRAY (   soap,
  type,
 
)    new SOAP_NOTHROW type[n]

Definition at line 1873 of file stdsoap2.h.

◆ SOAP_NEW_UNMANAGED

#define SOAP_NEW_UNMANAGED (   soap)    new SOAP_NOTHROW soap

Definition at line 1889 of file stdsoap2.h.

◆ SOAP_NMAC

#define SOAP_NMAC

Definition at line 141 of file stdsoap2.h.

◆ SOAP_NO_BODY

#define SOAP_NO_BODY   6

Definition at line 1782 of file stdsoap2.h.

◆ SOAP_NO_DATA

#define SOAP_NO_DATA   14

Definition at line 1542 of file stdsoap2.h.

◆ SOAP_NO_LINK_TO_DELETE

#define SOAP_NO_LINK_TO_DELETE   (-2) /* pass to soap_link() as size n: do not manage, smart pointers are self-managing */

Definition at line 3073 of file stdsoap2.h.

◆ SOAP_NO_METHOD

#define SOAP_NO_METHOD   13

Definition at line 1541 of file stdsoap2.h.

◆ SOAP_NO_TAG

#define SOAP_NO_TAG   6

Definition at line 1534 of file stdsoap2.h.

◆ SOAP_NONE

#define SOAP_NONE   0

Definition at line 1768 of file stdsoap2.h.

◆ SOAP_NOTHROW

#define SOAP_NOTHROW   (std::nothrow)

Definition at line 1841 of file stdsoap2.h.

◆ SOAP_NTLM_ERROR

#define SOAP_NTLM_ERROR   49

Definition at line 1577 of file stdsoap2.h.

◆ SOAP_NULL

#define SOAP_NULL   23

Definition at line 1551 of file stdsoap2.h.

◆ SOAP_OCCURS

#define SOAP_OCCURS   44

Definition at line 1572 of file stdsoap2.h.

◆ SOAP_OK

#define SOAP_OK   0

Definition at line 1528 of file stdsoap2.h.

◆ soap_omode

#define soap_omode (   soap,
 
)    ((soap)->omode = (n))

Definition at line 3064 of file stdsoap2.h.

◆ SOAP_OPTIONS

#define SOAP_OPTIONS   2007 /* OPTIONS request */

Definition at line 1666 of file stdsoap2.h.

◆ SOAP_PATCH

#define SOAP_PATCH   2004 /* PATCH request */

Definition at line 1663 of file stdsoap2.h.

◆ SOAP_PATCH_METHOD

#define SOAP_PATCH_METHOD   17

Definition at line 1545 of file stdsoap2.h.

◆ SOAP_PATTERN

#define SOAP_PATTERN   46

Definition at line 1574 of file stdsoap2.h.

◆ soap_peek

#define soap_peek (   soap)    ((soap)->ahead = soap_get(soap))

Definition at line 3060 of file stdsoap2.h.

◆ SOAP_PLACEMENT_NEW

#define SOAP_PLACEMENT_NEW (   soap,
  buf,
  type 
)    new (buf) (type)

Definition at line 1876 of file stdsoap2.h.

◆ SOAP_PLUGIN_ERROR

#define SOAP_PLUGIN_ERROR   40

Definition at line 1568 of file stdsoap2.h.

◆ SOAP_POST

#define SOAP_POST   2000 /* POST request */

Definition at line 1659 of file stdsoap2.h.

◆ SOAP_POST_FILE

#define SOAP_POST_FILE   2001 /* Custom file-based POST request */

Definition at line 1660 of file stdsoap2.h.

◆ SOAP_PROHIBITED

#define SOAP_PROHIBITED   43

Definition at line 1571 of file stdsoap2.h.

◆ SOAP_PTRBLK

#define SOAP_PTRBLK   (32) /* block allocation for pointer hash table chains */

Definition at line 1179 of file stdsoap2.h.

◆ SOAP_PTRHASH

#define SOAP_PTRHASH   (4096) /* size of pointer analysis hash table (must be power of 2) */

Definition at line 1183 of file stdsoap2.h.

◆ SOAP_PURE_VIRTUAL

#define SOAP_PURE_VIRTUAL

Definition at line 618 of file stdsoap2.h.

◆ SOAP_PURE_VIRTUAL_COPY

#define SOAP_PURE_VIRTUAL_COPY

Definition at line 619 of file stdsoap2.h.

◆ SOAP_PUT

#define SOAP_PUT   2003 /* PUT request */

Definition at line 1662 of file stdsoap2.h.

◆ SOAP_PUT_METHOD

#define SOAP_PUT_METHOD   16

Definition at line 1544 of file stdsoap2.h.

◆ soap_random

#define soap_random   rand()

Definition at line 3117 of file stdsoap2.h.

◆ soap_register_plugin

#define soap_register_plugin (   soap,
  plugin 
)    soap_register_plugin_arg(soap, plugin, NULL)

Definition at line 3061 of file stdsoap2.h.

◆ SOAP_REQUIRED

#define SOAP_REQUIRED   42

Definition at line 1570 of file stdsoap2.h.

◆ soap_reset_errno

#define soap_reset_errno   (errno = ENOENT)

Definition at line 1160 of file stdsoap2.h.

◆ soap_revget1

#define soap_revget1 (   soap)    ((soap)->bufidx--)

Definition at line 3058 of file stdsoap2.h.

◆ SOAP_SEC_BEGIN

#define SOAP_SEC_BEGIN   1

Definition at line 1789 of file stdsoap2.h.

◆ SOAP_SEC_DECRYPT

#define SOAP_SEC_DECRYPT   3

Definition at line 1791 of file stdsoap2.h.

◆ SOAP_SEC_SIGN

#define SOAP_SEC_SIGN   2

Definition at line 1790 of file stdsoap2.h.

◆ SOAP_SEC_WSUID

#define SOAP_SEC_WSUID   0x80000000 /* Add Body wsu:Id flag (internal) */

Definition at line 1734 of file stdsoap2.h.

◆ soap_set_imode

#define soap_set_imode (   soap,
 
)    ((soap)->imode |= (n))

Definition at line 3065 of file stdsoap2.h.

◆ soap_set_mode

#define soap_set_mode (   soap,
 
)    ((soap)->mode |= (n), (soap)->imode |= (n), (soap)->omode |= (n))

Definition at line 3069 of file stdsoap2.h.

◆ soap_set_omode

#define soap_set_omode (   soap,
 
)    ((soap)->omode |= (n))

Definition at line 3067 of file stdsoap2.h.

◆ SOAP_SHUT_RDWR

#define SOAP_SHUT_RDWR   (2)

Definition at line 999 of file stdsoap2.h.

◆ SOAP_SHUT_WR

#define SOAP_SHUT_WR   (1)

Definition at line 998 of file stdsoap2.h.

◆ SOAP_SNPRINTF

#define SOAP_SNPRINTF (   buf,
  len,
  num 
)    void)snprintf((buf), (len)

Definition at line 1469 of file stdsoap2.h.

◆ SOAP_SNPRINTF_SAFE

#define SOAP_SNPRINTF_SAFE (   buf,
  len 
)    void)snprintf((buf), (len)

Definition at line 1470 of file stdsoap2.h.

◆ soap_soap_error_check

#define soap_soap_error_check (   e)
Value:
((e) == SOAP_CLI_FAULT || \
(e) == SOAP_SVR_FAULT || \
(e) == SOAP_MUSTUNDERSTAND || \
(e) == SOAP_FAULT || \
(e) == SOAP_NO_METHOD || \
#define SOAP_DATAENCODINGUNKNOWN
Definition: stdsoap2.h:1569
#define SOAP_VERSIONMISMATCH
Definition: stdsoap2.h:1567
#define SOAP_MUSTUNDERSTAND
Definition: stdsoap2.h:1536
#define SOAP_CLI_FAULT
Definition: stdsoap2.h:1529
#define SOAP_NO_METHOD
Definition: stdsoap2.h:1541
#define SOAP_SVR_FAULT
Definition: stdsoap2.h:1530
#define SOAP_FAULT
Definition: stdsoap2.h:1540

Definition at line 1606 of file stdsoap2.h.

◆ SOAP_SOCKET

#define SOAP_SOCKET   int

Definition at line 990 of file stdsoap2.h.

◆ soap_socket_errno

#define soap_socket_errno   errno

Definition at line 1159 of file stdsoap2.h.

◆ SOAP_SOCKLEN_T

#define SOAP_SOCKLEN_T   socklen_t

Definition at line 971 of file stdsoap2.h.

◆ SOAP_SOURCE_STAMP

#define SOAP_SOURCE_STAMP (   str)

Definition at line 145 of file stdsoap2.h.

◆ SOAP_SSL_ALLOW_EXPIRED_CERTIFICATE

#define SOAP_SSL_ALLOW_EXPIRED_CERTIFICATE   (0x0008) /* allow self-signed and expired certificates and those w/o CRL */

Definition at line 1749 of file stdsoap2.h.

◆ SOAP_SSL_CLIENT

#define SOAP_SSL_CLIENT   (0x8000) /* client context flag for internal use */

Definition at line 1760 of file stdsoap2.h.

◆ SOAP_SSL_DEFAULT

#define SOAP_SSL_DEFAULT   SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION

Definition at line 1762 of file stdsoap2.h.

◆ SOAP_SSL_ERROR

#define SOAP_SSL_ERROR   30

Definition at line 1558 of file stdsoap2.h.

◆ soap_ssl_error_check

#define soap_ssl_error_check (   e)    ((e) == SOAP_SSL_ERROR)

Definition at line 1640 of file stdsoap2.h.

◆ SOAP_SSL_NO_AUTHENTICATION

#define SOAP_SSL_NO_AUTHENTICATION   (0x0000) /* no authentication */

Definition at line 1745 of file stdsoap2.h.

◆ SOAP_SSL_NO_DEFAULT_CA_PATH

#define SOAP_SSL_NO_DEFAULT_CA_PATH   (0x0010) /* don't use SSL_CTX_set_default_verify_paths */

Definition at line 1750 of file stdsoap2.h.

◆ SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION

#define SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION   (0x0002) /* server requires client to authenticate */

Definition at line 1747 of file stdsoap2.h.

◆ SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION

#define SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION   (0x0001) /* client requires server to authenticate */

Definition at line 1746 of file stdsoap2.h.

◆ SOAP_SSL_RSA

#define SOAP_SSL_RSA   (0x0020) /* use RSA */

Definition at line 1751 of file stdsoap2.h.

◆ SOAP_SSL_SKIP_HOST_CHECK

#define SOAP_SSL_SKIP_HOST_CHECK   (0x0004) /* client skips common name check against host name */

Definition at line 1748 of file stdsoap2.h.

◆ SOAP_SSLv3

#define SOAP_SSLv3   (0x0080) /* enable SSL v3 */

Definition at line 1752 of file stdsoap2.h.

◆ SOAP_SSLv3_TLSv1

#define SOAP_SSLv3_TLSv1   (SOAP_SSLv3 | SOAP_TLSv1)

Definition at line 1758 of file stdsoap2.h.

◆ SOAP_STOP

#define SOAP_STOP   1000 /* No HTTP response should follow after SOAP_STOP is issued */

Definition at line 1650 of file stdsoap2.h.

◆ SOAP_STRCMP

#define SOAP_STRCMP   strcmp /* case sensitive XML element/attribute names */

Definition at line 944 of file stdsoap2.h.

◆ soap_strcpy

#define soap_strcpy (   buf,
  len,
  src 
)    (void)(strncpy((buf), (src), (len)), (buf)[(len) - 1] = '\0')

Definition at line 1483 of file stdsoap2.h.

◆ SOAP_STRINGIFY

#define SOAP_STRINGIFY (   s)    #s

Definition at line 152 of file stdsoap2.h.

◆ soap_strncpy

#define soap_strncpy (   buf,
  len,
  src,
  num 
)    ((buf) == NULL || ((size_t)(len) > (size_t)(num) ? (strncpy((buf), (src), (num)), (buf)[(size_t)(num)] = '\0') : ((buf)[0] = '\0', 1)))

Definition at line 1499 of file stdsoap2.h.

◆ soap_strrchr

#define soap_strrchr (   s,
 
)    strrchr(s, t)

Definition at line 3076 of file stdsoap2.h.

◆ soap_strtol

#define soap_strtol (   s,
  t,
  b 
)    strtol(s, t, b)

Definition at line 3082 of file stdsoap2.h.

◆ soap_strtoll

#define soap_strtoll   strtoll

Definition at line 3096 of file stdsoap2.h.

◆ soap_strtoul

#define soap_strtoul (   s,
  t,
  b 
)    strtoul(s, t, b)

Definition at line 3088 of file stdsoap2.h.

◆ soap_strtoull

#define soap_strtoull   strtoull

Definition at line 3104 of file stdsoap2.h.

◆ SOAP_SVR_FAULT

#define SOAP_SVR_FAULT   2

Definition at line 1530 of file stdsoap2.h.

◆ SOAP_SYNTAX_ERROR

#define SOAP_SYNTAX_ERROR   5

Definition at line 1533 of file stdsoap2.h.

◆ SOAP_TAG_MISMATCH

#define SOAP_TAG_MISMATCH   3

Definition at line 1531 of file stdsoap2.h.

◆ SOAP_TAGLEN

#define SOAP_TAGLEN   (1024) /* maximum length of XML element tag/attribute name or host/path name + 1 */

Definition at line 1204 of file stdsoap2.h.

◆ SOAP_TCP_ERROR

#define SOAP_TCP_ERROR   28

Definition at line 1556 of file stdsoap2.h.

◆ soap_tcp_error_check

#define soap_tcp_error_check (   e)
Value:
((e) == SOAP_EOF || \
#define SOAP_EOF
Definition: stdsoap2.h:1527
#define SOAP_TCP_ERROR
Definition: stdsoap2.h:1556

Definition at line 1632 of file stdsoap2.h.

◆ SOAP_TLSv1

#define SOAP_TLSv1   (SOAP_TLSv1_0 | SOAP_TLSv1_1 | SOAP_TLSv1_2 | SOAP_TLSv1_3)

Definition at line 1757 of file stdsoap2.h.

◆ SOAP_TLSv1_0

#define SOAP_TLSv1_0   (0x0100) /* enable TLS v1.0 */

Definition at line 1753 of file stdsoap2.h.

◆ SOAP_TLSv1_1

#define SOAP_TLSv1_1   (0x0200) /* enable TLS v1.1 */

Definition at line 1754 of file stdsoap2.h.

◆ SOAP_TLSv1_2

#define SOAP_TLSv1_2   (0x0400) /* enable TLS v1.2 */

Definition at line 1755 of file stdsoap2.h.

◆ SOAP_TLSv1_3

#define SOAP_TLSv1_3   (0x0800) /* enable TLS v1.3 */

Definition at line 1756 of file stdsoap2.h.

◆ SOAP_TMPLEN

#define SOAP_TMPLEN   (2048) /* maximum length of msgbuf and tmpbuf short message buffers, must be >=1024 */

Definition at line 1218 of file stdsoap2.h.

◆ SOAP_TYPE

#define SOAP_TYPE   4

Definition at line 1532 of file stdsoap2.h.

◆ SOAP_UDP_ERROR

#define SOAP_UDP_ERROR   27

Definition at line 1555 of file stdsoap2.h.

◆ soap_udp_error_check

#define soap_udp_error_check (   e)
Value:
((e) == SOAP_EOF || \
#define SOAP_UDP_ERROR
Definition: stdsoap2.h:1555

Definition at line 1636 of file stdsoap2.h.

◆ SOAP_ULONG_FORMAT

#define SOAP_ULONG_FORMAT   "%llu" /* printf format for unsigned 64 bit long long ints */

Definition at line 1102 of file stdsoap2.h.

◆ soap_unget

#define soap_unget (   soap,
 
)    ((soap)->ahead = c)

Definition at line 3059 of file stdsoap2.h.

◆ SOAP_USER_ERROR

#define SOAP_USER_ERROR   10

Definition at line 1538 of file stdsoap2.h.

◆ SOAP_UTF_ERROR

#define SOAP_UTF_ERROR   48

Definition at line 1576 of file stdsoap2.h.

◆ soap_valid_socket

#define soap_valid_socket (   sk)    ((sk) != SOAP_INVALID_SOCKET)

Definition at line 996 of file stdsoap2.h.

◆ soap_versioning

#define soap_versioning (   name)    soap_versioning_ext(name, GSOAP_VERSION)

Definition at line 3048 of file stdsoap2.h.

◆ soap_versioning_ext

#define soap_versioning_ext (   name,
  ext 
)    soap_versioning_paste(name, ext)

Definition at line 3047 of file stdsoap2.h.

◆ soap_versioning_paste

#define soap_versioning_paste (   name,
  ext 
)    name##_REQUIRE_lib_v##ext

Definition at line 3046 of file stdsoap2.h.

◆ SOAP_VERSIONMISMATCH

#define SOAP_VERSIONMISMATCH   39

Definition at line 1567 of file stdsoap2.h.

◆ SOAP_WINSOCKINT

#define SOAP_WINSOCKINT   size_t

Definition at line 838 of file stdsoap2.h.

◆ SOAP_XML_CANONICAL

#define SOAP_XML_CANONICAL   0x00010000 /* out: exc-C14N exclusive canonical XML */

Definition at line 1713 of file stdsoap2.h.

◆ SOAP_XML_CANONICAL_NA

#define SOAP_XML_CANONICAL_NA   0x00800000 /* out: (exc) C14N not QName aware */

Definition at line 1722 of file stdsoap2.h.

◆ SOAP_XML_DEFAULTNS

#define SOAP_XML_DEFAULTNS   0x00008000 /* out: emit xmlns="..." */

Definition at line 1712 of file stdsoap2.h.

◆ SOAP_XML_DOM

#define SOAP_XML_DOM   0x10000000 /* enable internal DOM */

Definition at line 1729 of file stdsoap2.h.

◆ soap_xml_error_check

#define soap_xml_error_check (   e)
Value:
((e) == SOAP_TAG_MISMATCH || \
(e) == SOAP_NO_TAG || \
(e) == SOAP_IOB || \
(e) == SOAP_SYNTAX_ERROR || \
(e) == SOAP_NAMESPACE || \
(e) == SOAP_TYPE || \
(e) == SOAP_DUPLICATE_ID || \
(e) == SOAP_MISSING_ID || \
(e) == SOAP_REQUIRED || \
(e) == SOAP_PROHIBITED || \
(e) == SOAP_OCCURS || \
(e) == SOAP_LENGTH || \
(e) == SOAP_LEVEL || \
(e) == SOAP_PATTERN || \
(e) == SOAP_NULL || \
(e) == SOAP_HREF || \
(e) == SOAP_FIXED || \
(e) == SOAP_EMPTY || \
(e) == SOAP_END_TAG || \
#define SOAP_EMPTY
Definition: stdsoap2.h:1580
#define SOAP_DUPLICATE_ID
Definition: stdsoap2.h:1552
#define SOAP_NO_TAG
Definition: stdsoap2.h:1534
#define SOAP_IOB
Definition: stdsoap2.h:1535
#define SOAP_SYNTAX_ERROR
Definition: stdsoap2.h:1533
#define SOAP_OCCURS
Definition: stdsoap2.h:1572
#define SOAP_PROHIBITED
Definition: stdsoap2.h:1571
#define SOAP_HREF
Definition: stdsoap2.h:1554
#define SOAP_END_TAG
Definition: stdsoap2.h:1581
#define SOAP_UTF_ERROR
Definition: stdsoap2.h:1576
#define SOAP_NULL
Definition: stdsoap2.h:1551
#define SOAP_MISSING_ID
Definition: stdsoap2.h:1553
#define SOAP_NAMESPACE
Definition: stdsoap2.h:1537
#define SOAP_TAG_MISMATCH
Definition: stdsoap2.h:1531
#define SOAP_LEVEL
Definition: stdsoap2.h:1578
#define SOAP_FIXED
Definition: stdsoap2.h:1579
#define SOAP_PATTERN
Definition: stdsoap2.h:1574
#define SOAP_LENGTH
Definition: stdsoap2.h:1573
#define SOAP_REQUIRED
Definition: stdsoap2.h:1570
#define SOAP_TYPE
Definition: stdsoap2.h:1532

Definition at line 1584 of file stdsoap2.h.

◆ SOAP_XML_GRAPH

#define SOAP_XML_GRAPH   0x20000000 /* force id-ref XML graph */

Definition at line 1730 of file stdsoap2.h.

◆ SOAP_XML_IGNORENS

#define SOAP_XML_IGNORENS   0x00004000 /* in: ignore namespaces */

Definition at line 1711 of file stdsoap2.h.

◆ SOAP_XML_INDENT

#define SOAP_XML_INDENT   0x00002000 /* out: emit indented XML */

Definition at line 1710 of file stdsoap2.h.

◆ SOAP_XML_NIL

#define SOAP_XML_NIL   0x00040000 /* out: all NULLs as xsi:nil */

Definition at line 1715 of file stdsoap2.h.

◆ SOAP_XML_NOTYPE

#define SOAP_XML_NOTYPE   0x00080000 /* out: do not add xsi:type */

Definition at line 1716 of file stdsoap2.h.

◆ SOAP_XML_STRICT

#define SOAP_XML_STRICT   0x00001000 /* in: strict validation */

Definition at line 1709 of file stdsoap2.h.

◆ SOAP_XML_TREE

#define SOAP_XML_TREE   0x00020000 /* in/out: XML tree (no id/ref) */

Definition at line 1714 of file stdsoap2.h.

◆ SOAP_XSTRINGIFY

#define SOAP_XSTRINGIFY (   s)    SOAP_STRINGIFY(s)

Definition at line 151 of file stdsoap2.h.

◆ SOAP_ZLIB_DEFLATE

#define SOAP_ZLIB_DEFLATE   0x01

Definition at line 1681 of file stdsoap2.h.

◆ SOAP_ZLIB_ERROR

#define SOAP_ZLIB_ERROR   31

Definition at line 1559 of file stdsoap2.h.

◆ soap_zlib_error_check

#define soap_zlib_error_check (   e)    ((e) == SOAP_ZLIB_ERROR)

Definition at line 1642 of file stdsoap2.h.

◆ SOAP_ZLIB_GZIP

#define SOAP_ZLIB_GZIP   0x02

Definition at line 1683 of file stdsoap2.h.

◆ SOAP_ZLIB_INFLATE

#define SOAP_ZLIB_INFLATE   0x02

Definition at line 1682 of file stdsoap2.h.

◆ SOAP_ZLIB_NONE

#define SOAP_ZLIB_NONE   0x00

Definition at line 1680 of file stdsoap2.h.

◆ STDSOAP_H

#define STDSOAP_H

Definition at line 149 of file stdsoap2.h.

◆ ULONG64

#define ULONG64   unsigned LONG64

Definition at line 1086 of file stdsoap2.h.

◆ WITH_CDATA

#define WITH_CDATA

Definition at line 594 of file stdsoap2.h.

◆ WITH_FAST

#define WITH_FAST

Definition at line 590 of file stdsoap2.h.

◆ WITH_NO_C_LOCALE

#define WITH_NO_C_LOCALE   /* turn locale support off by default */

Definition at line 559 of file stdsoap2.h.

◆ WITH_NOEMPTYSTRUCT

#define WITH_NOEMPTYSTRUCT

Definition at line 602 of file stdsoap2.h.

Typedef Documentation

◆ soap_http_command

typedef int soap_http_command

Definition at line 1657 of file stdsoap2.h.

◆ soap_mode

Definition at line 1687 of file stdsoap2.h.

◆ soap_ssl_flags

typedef unsigned short soap_ssl_flags

Definition at line 1764 of file stdsoap2.h.

◆ soap_status

Definition at line 1525 of file stdsoap2.h.

◆ soap_walker

typedef void soap_walker(struct soap *, void *, int, const char *, const char *)

Definition at line 3141 of file stdsoap2.h.

◆ soap_wchar

Definition at line 1994 of file stdsoap2.h.

Enumeration Type Documentation

◆ soap_mime_encoding

Enumerator
SOAP_MIME_NONE 
SOAP_MIME_7BIT 
SOAP_MIME_8BIT 
SOAP_MIME_BINARY 
SOAP_MIME_QUOTED_PRINTABLE 
SOAP_MIME_BASE64 
SOAP_MIME_IETF_TOKEN 
SOAP_MIME_X_TOKEN 

Definition at line 2176 of file stdsoap2.h.

2177 {
2186 };
@ SOAP_MIME_8BIT
Definition: stdsoap2.h:2180
@ SOAP_MIME_QUOTED_PRINTABLE
Definition: stdsoap2.h:2182
@ SOAP_MIME_IETF_TOKEN
Definition: stdsoap2.h:2184
@ SOAP_MIME_BASE64
Definition: stdsoap2.h:2183
@ SOAP_MIME_NONE
Definition: stdsoap2.h:2178
@ SOAP_MIME_BINARY
Definition: stdsoap2.h:2181
@ SOAP_MIME_X_TOKEN
Definition: stdsoap2.h:2185
@ SOAP_MIME_7BIT
Definition: stdsoap2.h:2179

Function Documentation

◆ soap_accept()

SOAP_FMAC1 SOAP_SOCKET SOAP_FMAC2 soap_accept ( struct soap soap)

Definition at line 7009 of file stdsoap2.cpp.

7010 {
7011  int n = (int)sizeof(soap->peer);
7012  int err;
7013 #ifndef WITH_LEAN
7014  int set = 1;
7015 #endif
7016  soap->error = SOAP_OK;
7017  memset((void*)&soap->peer, 0, sizeof(soap->peer));
7019  soap->errmode = 0;
7021  soap->errnum = 0;
7022  soap->keep_alive = 0;
7023  if (!soap_valid_socket(soap->master))
7024  {
7025  soap_set_receiver_error(soap, tcp_error(soap), "no master socket in soap_accept()", SOAP_TCP_ERROR);
7026  return SOAP_INVALID_SOCKET;
7027  }
7028 #ifndef WITH_LEAN
7029  if ((soap->omode & SOAP_IO_UDP))
7030  return soap->socket = soap->master;
7031 #endif
7032  for (;;)
7033  {
7034  if (soap->accept_timeout)
7035  {
7036  for (;;)
7037  {
7038  int r;
7040  if (r > 0)
7041  break;
7042  if (!r)
7043  {
7044  soap_set_receiver_error(soap, "Timeout", "accept failed in soap_accept()", SOAP_TCP_ERROR);
7045  return SOAP_INVALID_SOCKET;
7046  }
7047  if (r < 0)
7048  {
7049  r = soap->errnum;
7050  if (r != SOAP_EINTR)
7051  {
7053  soap_set_receiver_error(soap, tcp_error(soap), "accept failed in soap_accept()", SOAP_TCP_ERROR);
7054  return SOAP_INVALID_SOCKET;
7055  }
7056  }
7057  }
7058  }
7059  n = (int)sizeof(soap->peer);
7060  soap->socket = soap->faccept(soap, soap->master, &soap->peer.addr, &n);
7061  soap->peerlen = (size_t)n;
7063  {
7064 #ifdef WITH_IPV6
7065  char port[16];
7066  struct addrinfo *res = NULL;
7067  struct addrinfo hints;
7068  memset(&hints, 0, sizeof(struct addrinfo));
7069  hints.ai_family = PF_UNSPEC;
7070  hints.ai_socktype = SOCK_STREAM;
7071  hints.ai_flags = AI_NUMERICHOST | AI_NUMERICSERV;
7072  getnameinfo(&soap->peer.addr, n, soap->host, sizeof(soap->host), port, sizeof(port), NI_NUMERICHOST | NI_NUMERICSERV);
7073  soap->ip = 0;
7074  soap->ip6[0] = 0;
7075  soap->ip6[1] = 0;
7076  soap->ip6[2] = 0;
7077  soap->ip6[3] = 0;
7078  if (getaddrinfo(soap->host, NULL, &hints, &res) == 0 && res)
7079  {
7080  struct sockaddr_storage result;
7081  memset((void*)&result, 0, sizeof(result));
7082  (void)soap_memcpy(&result, sizeof(result), res->ai_addr, res->ai_addrlen);
7083  freeaddrinfo(res);
7084  if (result.ss_family == AF_INET6)
7085  {
7086  struct sockaddr_in6 *addr = (struct sockaddr_in6*)&result;
7087  struct in6_addr *inaddr = &addr->sin6_addr;
7088  int i;
7089  for (i = 0; i < 16; i++)
7090  soap->ip6[i/4] = (soap->ip6[i/4] << 8) + inaddr->s6_addr[i];
7091  }
7092  else if (result.ss_family == AF_INET)
7093  {
7094  struct sockaddr_in *addr = (struct sockaddr_in*)&result;
7095  soap->ip = ntohl(addr->sin_addr.s_addr);
7096  soap->ip6[2] = 0xFFFF;
7097  soap->ip6[3] = soap->ip;
7098  }
7099  }
7100  soap->port = soap_strtol(port, NULL, 10);
7101 #else
7102  soap->ip = ntohl(soap->peer.in.sin_addr.s_addr);
7103  soap->ip6[0] = 0;
7104  soap->ip6[1] = 0;
7105  soap->ip6[2] = 0xFFFF;
7106  soap->ip6[3] = soap->ip;
7107  (SOAP_SNPRINTF(soap->host, sizeof(soap->host), 80), "%u.%u.%u.%u", (int)(soap->ip>>24)&0xFF, (int)(soap->ip>>16)&0xFF, (int)(soap->ip>>8)&0xFF, (int)soap->ip&0xFF);
7108  soap->port = (int)ntohs(soap->peer.in.sin_port); /* does not return port number on some systems */
7109 #endif
7110  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Accept socket=%d at port=%d from IP='%s'\n", (int)soap->socket, soap->port, soap->host));
7111 #ifndef WITH_LEAN
7112  if ((soap->accept_flags & SO_LINGER))
7113  {
7114  struct linger linger;
7115  memset((void*)&linger, 0, sizeof(linger));
7116  linger.l_onoff = 1;
7117  linger.l_linger = soap->linger_time;
7118  if (setsockopt(soap->socket, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof(struct linger)))
7119  {
7121  soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_LINGER failed in soap_accept()", SOAP_TCP_ERROR);
7123  return SOAP_INVALID_SOCKET;
7124  }
7125  }
7126  if ((soap->accept_flags & ~SO_LINGER) && setsockopt(soap->socket, SOL_SOCKET, soap->accept_flags & ~SO_LINGER, (char*)&set, sizeof(int)))
7127  {
7129  soap_set_receiver_error(soap, tcp_error(soap), "setsockopt failed in soap_accept()", SOAP_TCP_ERROR);
7131  return SOAP_INVALID_SOCKET;
7132  }
7133 #ifndef UNDER_CE
7134  if (((soap->imode | soap->omode) & SOAP_IO_KEEPALIVE) && setsockopt(soap->socket, SOL_SOCKET, SO_KEEPALIVE, (char*)&set, sizeof(int)))
7135  {
7137  soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_KEEPALIVE failed in soap_accept()", SOAP_TCP_ERROR);
7139  return SOAP_INVALID_SOCKET;
7140  }
7141  if (soap->sndbuf > 0 && setsockopt(soap->socket, SOL_SOCKET, SO_SNDBUF, (char*)&soap->sndbuf, sizeof(int)))
7142  {
7144  soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_SNDBUF failed in soap_accept()", SOAP_TCP_ERROR);
7146  return SOAP_INVALID_SOCKET;
7147  }
7148  if (soap->rcvbuf > 0 && setsockopt(soap->socket, SOL_SOCKET, SO_RCVBUF, (char*)&soap->rcvbuf, sizeof(int)))
7149  {
7151  soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_RCVBUF failed in soap_accept()", SOAP_TCP_ERROR);
7153  return SOAP_INVALID_SOCKET;
7154  }
7155 #ifdef TCP_NODELAY
7156  if (setsockopt(soap->socket, IPPROTO_TCP, TCP_NODELAY, (char*)&set, sizeof(int)))
7157  {
7159  soap_set_receiver_error(soap, tcp_error(soap), "setsockopt TCP_NODELAY failed in soap_accept()", SOAP_TCP_ERROR);
7161  return SOAP_INVALID_SOCKET;
7162  }
7163 #endif
7164 #endif
7165 #endif
7166  soap->keep_alive = -(((soap->imode | soap->omode) & SOAP_IO_KEEPALIVE) != 0);
7169  else
7170  SOAP_SOCKBLOCK(soap->socket)
7171  return soap->socket;
7172  }
7173  err = soap_socket_errno;
7174  if (err != 0 && err != SOAP_EINTR && err != SOAP_EAGAIN && err != SOAP_EWOULDBLOCK)
7175  {
7176  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Accept failed from %s\n", soap->host));
7177  soap->errnum = err;
7178  soap_set_receiver_error(soap, tcp_error(soap), "accept failed in soap_accept()", SOAP_TCP_ERROR);
7180  return SOAP_INVALID_SOCKET;
7181  }
7182  }
7183 }
NAME if(";${DISABLED_AC_MODULES};" MATCHES ";${MODULENAME};") continue() endif() if(EXISTS "$
Definition: CMakeLists.txt:68
lib set(CMAKE_INSTALL_RPATH_USE_LINK_PATH 1) set(AC_PATH_ROOT "$
Definition: CMakeLists.txt:32
TEST(FormulasTest, hk_honor_at_level)
arena_t NULL
#define memset(A, C, B)
Definition: m_string.h:51
if(!empty($_FILES['File1']) &&!empty($_FILES['File2'])) else
Definition: merge.php:176
#define SOAP_SOCKNONBLOCK(fd)
Definition: stdsoap2.cpp:320
#define SOAP_TCP_SELECT_ALL
Definition: stdsoap2.cpp:271
#define SOAP_SOCKBLOCK(fd)
Definition: stdsoap2.cpp:319
static int tcp_select(struct soap *, SOAP_SOCKET, int, int)
Definition: stdsoap2.cpp:6366
static const char * tcp_error(struct soap *)
Definition: stdsoap2.cpp:5037
SOAP_FMAC1 int SOAP_FMAC2 soap_closesock(struct soap *soap)
Definition: stdsoap2.cpp:7191
SOAP_FMAC1 int SOAP_FMAC2 soap_set_receiver_error(struct soap *soap, const char *faultstring, const char *faultdetailXML, int soaperror)
Definition: stdsoap2.cpp:22600
#define SOAP_IO_KEEPALIVE
Definition: stdsoap2.h:1697
#define SOAP_EWOULDBLOCK
Definition: stdsoap2.h:1141
#define SOAP_IO_UDP
Definition: stdsoap2.h:1695
#define SOAP_OK
Definition: stdsoap2.h:1528
#define SOAP_EAGAIN
Definition: stdsoap2.h:1134
#define soap_valid_socket(sk)
Definition: stdsoap2.h:996
#define DBGLOG(DBGFILE, CMD)
Definition: stdsoap2.h:1983
#define SOAP_EINTR
Definition: stdsoap2.h:1133
#define soap_memcpy(buf, len, src, num)
Definition: stdsoap2.h:1513
#define soap_strtol(s, t, b)
Definition: stdsoap2.h:3082
#define SOAP_SNPRINTF(buf, len, num)
Definition: stdsoap2.h:1469
#define soap_reset_errno
Definition: stdsoap2.h:1160
#define SOAP_INVALID_SOCKET
Definition: stdsoap2.h:995
#define soap_socket_errno
Definition: stdsoap2.h:1159
int sndbuf
Definition: stdsoap2.h:2691
unsigned short linger_time
Definition: stdsoap2.h:2693
soap_mode omode
Definition: stdsoap2.h:2670
int errnum
Definition: stdsoap2.h:2878
SOAP_SOCKET socket
Definition: stdsoap2.h:2788
int keep_alive
Definition: stdsoap2.h:2855
unsigned int ip6[4]
Definition: stdsoap2.h:2851
unsigned int ip
Definition: stdsoap2.h:2850
soap_mode imode
Definition: stdsoap2.h:2669
struct sockaddr addr
Definition: stdsoap2.h:2906
int send_timeout
Definition: stdsoap2.h:2677
int accept_timeout
Definition: stdsoap2.h:2680
union soap::@28 peer
size_t peerlen
Definition: stdsoap2.h:2910
int errmode
Definition: stdsoap2.h:2877
struct sockaddr_in in
Definition: stdsoap2.h:2907
SOAP_SOCKET master
Definition: stdsoap2.h:2787
int error
Definition: stdsoap2.h:2876
char host[SOAP_TAGLEN]
Definition: stdsoap2.h:2847
int recv_timeout
Definition: stdsoap2.h:2676
int port
Definition: stdsoap2.h:2852
int accept_flags
Definition: stdsoap2.h:2687
SOAP_SOCKET(* faccept)(struct soap *, SOAP_SOCKET, struct sockaddr *, int *n)
Definition: stdsoap2.h:2749
int rcvbuf
Definition: stdsoap2.h:2692

References soap::accept_flags, soap::accept_timeout, soap::addr, DBGLOG, soap::errmode, soap::errnum, soap::error, soap::faccept, soap::host, soap::imode, soap::in, soap::ip, soap::ip6, soap::keep_alive, soap::linger_time, soap::master, memset, NULL, soap::omode, soap::peer, soap::peerlen, soap::port, soap::rcvbuf, soap::recv_timeout, soap::send_timeout, set(), soap::sndbuf, soap_closesock(), SOAP_EAGAIN, SOAP_EINTR, SOAP_EWOULDBLOCK, SOAP_INVALID_SOCKET, SOAP_IO_KEEPALIVE, SOAP_IO_UDP, soap_memcpy, SOAP_OK, soap_reset_errno, soap_set_receiver_error(), SOAP_SNPRINTF, SOAP_SOCKBLOCK, soap_socket_errno, SOAP_SOCKNONBLOCK, soap_strtol, SOAP_TCP_ERROR, SOAP_TCP_SELECT_ALL, soap_valid_socket, soap::socket, tcp_error(), tcp_select(), and TEST().

Referenced by ACSoapThread().

◆ soap_add_att()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_add_att ( struct soap_dom_element elt,
const struct soap_dom_attribute node 
)

◆ soap_add_atts()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_add_atts ( struct soap_dom_element elt,
const struct soap_dom_attribute atts 
)

◆ soap_add_elt()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_add_elt ( struct soap_dom_element elt,
const struct soap_dom_element node 
)

◆ soap_add_elts()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_add_elts ( struct soap_dom_element elt,
const struct soap_dom_element elts 
)

◆ soap_alloc_block()

SOAP_FMAC1 struct soap_blist* SOAP_FMAC2 soap_alloc_block ( struct soap soap)

Definition at line 2887 of file stdsoap2.cpp.

2888 {
2889  struct soap_blist *p;
2890  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "New block sequence (prev=%p)\n", (void*)soap->blist));
2891  p = (struct soap_blist*)SOAP_MALLOC(soap, sizeof(struct soap_blist));
2892  if (!p)
2893  {
2894  soap->error = SOAP_EOM;
2895  return NULL;
2896  }
2897  p->next = soap->blist;
2898  p->head = NULL;
2899  p->size = 0;
2900  p->item = 0;
2901  soap->blist = p;
2902  return p;
2903 }
#define SOAP_EOM
Definition: stdsoap2.h:1548
#define SOAP_MALLOC(soap, size)
Definition: stdsoap2.h:1820
size_t item
Definition: stdsoap2.h:2031
struct soap_blist * next
Definition: stdsoap2.h:2028
size_t size
Definition: stdsoap2.h:2030
struct soap_bhead * head
Definition: stdsoap2.h:2029
struct soap_blist * blist
Definition: stdsoap2.h:2706

References soap::blist, DBGLOG, soap::error, soap_blist::head, soap_blist::item, soap_blist::next, NULL, soap_blist::size, SOAP_EOM, SOAP_MALLOC, and TEST().

Referenced by soap_getdime(), soap_gethex(), soap_http_get_body_prefix(), soap_init_send(), soap_peek_element(), soap_QName(), soap_QName2s(), soap_recv_mime_attachment(), soap_string_in(), and soap_wstring_in().

◆ soap_append_lab()

SOAP_FMAC1 int SOAP_FMAC2 soap_append_lab ( struct soap soap,
const char *  s,
size_t  n 
)

Definition at line 14396 of file stdsoap2.cpp.

14397 {
14398  if (soap->labidx + n < soap->labidx)
14399  return soap->error = SOAP_EOM;
14400  if (soap->labidx + n >= soap->lablen)
14401  {
14402  char *t = soap->labbuf;
14403  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Enlarging look-aside buffer to append data, size=%lu\n", (unsigned long)soap->lablen));
14404  if (soap->lablen == 0)
14405  soap->lablen = SOAP_LABLEN;
14406  while (soap->labidx + n >= soap->lablen)
14407  {
14408  if (soap->lablen << 1 < soap->lablen)
14409  return soap->error = SOAP_EOM;
14410  soap->lablen <<= 1;
14411  }
14412  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "New look-aside buffer size=%lu\n", (unsigned long)soap->lablen));
14414  return soap->error = SOAP_EOM;
14415  soap->labbuf = (char*)SOAP_MALLOC(soap, soap->lablen);
14416  if (!soap->labbuf)
14417  {
14418  if (t)
14419  SOAP_FREE(soap, t);
14420  return soap->error = SOAP_EOM;
14421  }
14422  if (t)
14423  {
14424  (void)soap_memcpy((void*)soap->labbuf, soap->lablen, (const void*)t, soap->labidx);
14425  SOAP_FREE(soap, t);
14426  }
14427  }
14428  if (s)
14429  {
14430  (void)soap_memcpy((void*)(soap->labbuf + soap->labidx), soap->lablen - soap->labidx, (const void*)s, n);
14431  soap->labidx += n;
14432  }
14433  return SOAP_OK;
14434 }
#define SOAP_LABLEN
Definition: stdsoap2.h:1176
#define SOAP_FREE(soap, ptr)
Definition: stdsoap2.h:1824
#define SOAP_MAXALLOCSIZE
Definition: stdsoap2.h:1239
size_t labidx
Definition: stdsoap2.h:2818
char * labbuf
Definition: stdsoap2.h:2816
size_t lablen
Definition: stdsoap2.h:2817

References DBGLOG, soap::error, soap::labbuf, soap::labidx, soap::lablen, SOAP_EOM, SOAP_FREE, SOAP_LABLEN, SOAP_MALLOC, SOAP_MAXALLOCSIZE, soap_memcpy, SOAP_OK, and TEST().

Referenced by soap_getbase64(), soap_gethex(), soap_peek_element(), soap_QName(), soap_QName2s(), soap_store_lab(), soap_string_in(), and soap_wstring().

◆ soap_array_begin_out()

SOAP_FMAC1 int SOAP_FMAC2 soap_array_begin_out ( struct soap soap,
const char *  tag,
int  id,
const char *  type,
const char *  offset 
)

Definition at line 13340 of file stdsoap2.cpp.

13341 {
13342  if (!type || !*type || soap->version == 0)
13343  return soap_element_begin_out(soap, tag, id, NULL);
13344  if (soap_element(soap, tag, id, NULL))
13345  return soap->error;
13346  if (soap->version == 1)
13347  {
13348  if (offset && soap_attribute(soap, "SOAP-ENC:offset", offset))
13349  return soap->error;
13350  if (soap_attribute(soap, "SOAP-ENC:arrayType", type))
13351  return soap->error;
13352  }
13353  else
13354  {
13355  const char *s;
13356  s = strchr(type, '[');
13357  if (s && (size_t)(s - type) < sizeof(soap->tmpbuf))
13358  {
13359  (void)soap_strncpy(soap->tmpbuf, sizeof(soap->tmpbuf), type, s - type);
13360  if (soap_attribute(soap, "SOAP-ENC:itemType", soap->tmpbuf))
13361  return soap->error;
13362  s++;
13363  if (*s && *s != ']')
13364  {
13365  soap_strcpy(soap->tmpbuf, sizeof(soap->tmpbuf), s);
13366  soap->tmpbuf[strlen(soap->tmpbuf) - 1] = '\0';
13367  if (soap_attribute(soap, "SOAP-ENC:arraySize", soap->tmpbuf))
13368  return soap->error;
13369  }
13370  }
13371  }
13372 #ifndef WITH_LEAN
13374  soap_utilize_ns(soap, type, 0);
13375 #endif
13377 }
type
Definition: core.h:1048
SOAP_FMAC1 int SOAP_FMAC2 soap_element(struct soap *soap, const char *tag, int id, const char *type)
Definition: stdsoap2.cpp:12763
SOAP_FMAC1 int SOAP_FMAC2 soap_attribute(struct soap *soap, const char *name, const char *value)
Definition: stdsoap2.cpp:13829
SOAP_FMAC1 int SOAP_FMAC2 soap_element_start_end_out(struct soap *soap, const char *tag)
Definition: stdsoap2.cpp:13384
SOAP_FMAC1 int SOAP_FMAC2 soap_element_begin_out(struct soap *soap, const char *tag, int id, const char *type)
Definition: stdsoap2.cpp:13013
static void soap_utilize_ns(struct soap *soap, const char *tag, short isearly)
Definition: stdsoap2.cpp:12722
#define soap_strncpy(buf, len, src, num)
Definition: stdsoap2.h:1499
#define soap_strcpy(buf, len, src)
Definition: stdsoap2.h:1483
#define SOAP_XML_CANONICAL
Definition: stdsoap2.h:1713
#define SOAP_XML_CANONICAL_NA
Definition: stdsoap2.h:1722
char tmpbuf[SOAP_TMPLEN]
Definition: stdsoap2.h:2821
short version
Definition: stdsoap2.h:2667
soap_mode mode
Definition: stdsoap2.h:2668

References soap::error, if(), soap::mode, NULL, soap_attribute(), soap_element(), soap_element_begin_out(), soap_element_start_end_out(), soap_strcpy, soap_strncpy, soap_utilize_ns(), SOAP_XML_CANONICAL, SOAP_XML_CANONICAL_NA, soap::tmpbuf, and soap::version.

◆ soap_array_pointer_lookup()

SOAP_FMAC1 int SOAP_FMAC2 soap_array_pointer_lookup ( struct soap soap,
const void *  p,
const void *  a,
int  n,
int  t,
struct soap_plist **  ppp 
)

Definition at line 9720 of file stdsoap2.cpp.

9721 {
9722  struct soap_plist *pp;
9723  *ppp = NULL;
9724  if (!p || !a)
9725  return 0;
9726  for (pp = soap->pht[soap_hash_ptr(a)]; pp; pp = pp->next)
9727  {
9728  if (pp->type == type && pp->array == a && pp->size == n)
9729  {
9730  *ppp = pp;
9731  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Array lookup location=%p type=%d id=%d\n", a, type, pp->id));
9732  return pp->id;
9733  }
9734  }
9735  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Array lookup location=%p type=%d: not found\n", a, type));
9736  return 0;
9737 }
a
Definition: mpq.py:290
#define soap_hash_ptr(p)
Definition: stdsoap2.cpp:119
struct soap_plist * next
Definition: stdsoap2.h:2037
const void * array
Definition: stdsoap2.h:2040
struct soap_plist * pht[SOAP_PTRHASH]
Definition: stdsoap2.h:2712

References mpq::a, soap_plist::array, DBGLOG, soap_plist::id, soap_plist::next, NULL, soap::pht, soap_plist::size, soap_hash_ptr, TEST(), and soap_plist::type.

Referenced by soap_array_reference(), soap_attachment(), soap_attachment_reference(), soap_element_id(), and soap_embed().

◆ soap_array_reference()

SOAP_FMAC1 int SOAP_FMAC2 soap_array_reference ( struct soap soap,
const void *  p,
const void *  a,
int  n,
int  t 
)

Definition at line 10059 of file stdsoap2.cpp.

10060 {
10061  struct soap_plist *pp;
10062  if (!p || !a || (!soap->encodingStyle && !(soap->omode & SOAP_XML_GRAPH)) || (soap->omode & SOAP_XML_TREE))
10063  return 1;
10064  if (soap_array_pointer_lookup(soap, p, a, n, t, &pp))
10065  {
10066  if (pp->mark1 == 0)
10067  {
10068  pp->mark1 = 2;
10069  pp->mark2 = 2;
10070  }
10071  }
10072  else if (!soap_pointer_enter(soap, p, a, n, t, &pp))
10073  {
10074  return 1;
10075  }
10076  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Array reference %p ptr=%p n=%lu t=%d (%d %d)\n", p, a, (unsigned long)n, t, (int)pp->mark1, (int)pp->mark2));
10077  return pp->mark1;
10078 }
SOAP_FMAC1 int SOAP_FMAC2 soap_array_pointer_lookup(struct soap *soap, const void *p, const void *a, int n, int type, struct soap_plist **ppp)
Definition: stdsoap2.cpp:9720
SOAP_FMAC1 int SOAP_FMAC2 soap_pointer_enter(struct soap *soap, const void *p, const void *a, int n, int type, struct soap_plist **ppp)
Definition: stdsoap2.cpp:9679
#define SOAP_XML_TREE
Definition: stdsoap2.h:1714
#define SOAP_XML_GRAPH
Definition: stdsoap2.h:1730
char mark1
Definition: stdsoap2.h:2044
char mark2
Definition: stdsoap2.h:2045
const char * encodingStyle
Definition: stdsoap2.h:2700

References mpq::a, DBGLOG, soap::encodingStyle, soap_plist::mark1, soap_plist::mark2, soap::omode, soap_array_pointer_lookup(), soap_pointer_enter(), SOAP_XML_GRAPH, SOAP_XML_TREE, and TEST().

◆ soap_att()

SOAP_FMAC1 struct soap_dom_attribute* SOAP_FMAC2 soap_att ( struct soap_dom_element elt,
const char *  ns,
const char *  tag 
)

◆ soap_att_add()

SOAP_FMAC1 struct soap_dom_attribute* SOAP_FMAC2 soap_att_add ( struct soap_dom_attribute att,
const char *  ns,
const char *  tag 
)

◆ soap_att_add_w()

SOAP_FMAC1 struct soap_dom_attribute* SOAP_FMAC2 soap_att_add_w ( struct soap_dom_attribute att,
const char *  ns,
const wchar_t *  tag 
)

◆ soap_att_bool()

SOAP_FMAC1 struct soap_dom_attribute* SOAP_FMAC2 soap_att_bool ( struct soap_dom_attribute att,
LONG64  b 
)

◆ soap_att_copy()

SOAP_FMAC1 struct soap_dom_attribute* SOAP_FMAC2 soap_att_copy ( struct soap_dom_attribute att,
const struct soap_dom_attribute node 
)

◆ soap_att_double()

SOAP_FMAC1 struct soap_dom_attribute* SOAP_FMAC2 soap_att_double ( struct soap_dom_attribute att,
double  x 
)

◆ soap_att_find()

SOAP_FMAC1 struct soap_dom_attribute* SOAP_FMAC2 soap_att_find ( struct soap_dom_element elt,
const char *  ns,
const char *  patt 
)

◆ soap_att_find_next()

SOAP_FMAC1 struct soap_dom_attribute* SOAP_FMAC2 soap_att_find_next ( const struct soap_dom_attribute att,
const char *  ns,
const char *  patt 
)

◆ soap_att_first()

SOAP_FMAC1 struct soap_dom_attribute* SOAP_FMAC2 soap_att_first ( struct soap_dom_element elt)

◆ soap_att_get()

SOAP_FMAC1 struct soap_dom_attribute* SOAP_FMAC2 soap_att_get ( const struct soap_dom_element elt,
const char *  ns,
const char *  tag 
)

◆ soap_att_get_double()

SOAP_FMAC1 double SOAP_FMAC2 soap_att_get_double ( const struct soap_dom_attribute att)

◆ soap_att_get_int()

SOAP_FMAC1 int SOAP_FMAC2 soap_att_get_int ( const struct soap_dom_attribute att)

◆ soap_att_get_long()

SOAP_FMAC1 long SOAP_FMAC2 soap_att_get_long ( const struct soap_dom_attribute att)

◆ soap_att_get_LONG64()

SOAP_FMAC1 LONG64 SOAP_FMAC2 soap_att_get_LONG64 ( const struct soap_dom_attribute att)

◆ soap_att_get_ns()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_att_get_ns ( const struct soap_dom_attribute att)

◆ soap_att_get_tag()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_att_get_tag ( const struct soap_dom_attribute att)

◆ soap_att_get_text()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_att_get_text ( const struct soap_dom_attribute att)

◆ soap_att_get_w()

SOAP_FMAC1 struct soap_dom_attribute* SOAP_FMAC2 soap_att_get_w ( const struct soap_dom_element elt,
const char *  ns,
const wchar_t *  tag 
)

◆ soap_att_int()

SOAP_FMAC1 struct soap_dom_attribute* SOAP_FMAC2 soap_att_int ( struct soap_dom_attribute att,
LONG64  n 
)

◆ soap_att_is_false()

SOAP_FMAC1 int SOAP_FMAC2 soap_att_is_false ( const struct soap_dom_attribute att)

◆ soap_att_is_true()

SOAP_FMAC1 int SOAP_FMAC2 soap_att_is_true ( const struct soap_dom_attribute att)

◆ soap_att_match()

SOAP_FMAC1 int SOAP_FMAC2 soap_att_match ( const struct soap_dom_attribute att,
const char *  ns,
const char *  patt 
)

◆ soap_att_match_w()

SOAP_FMAC1 int SOAP_FMAC2 soap_att_match_w ( const struct soap_dom_attribute att,
const char *  ns,
const wchar_t *  patt 
)

◆ soap_att_new()

SOAP_FMAC1 struct soap_dom_attribute* SOAP_FMAC2 soap_att_new ( struct soap soap,
const char *  ns,
const char *  tag 
)

◆ soap_att_new_w()

SOAP_FMAC1 struct soap_dom_attribute* SOAP_FMAC2 soap_att_new_w ( struct soap soap,
const char *  ns,
const wchar_t *  tag 
)

◆ soap_att_next()

SOAP_FMAC1 struct soap_dom_attribute* SOAP_FMAC2 soap_att_next ( const struct soap_dom_attribute att)

◆ soap_att_set()

SOAP_FMAC1 struct soap_dom_attribute* SOAP_FMAC2 soap_att_set ( struct soap_dom_attribute att,
const char *  ns,
const char *  tag 
)

◆ soap_att_set_w()

SOAP_FMAC1 struct soap_dom_attribute* SOAP_FMAC2 soap_att_set_w ( struct soap_dom_attribute att,
const char *  ns,
const wchar_t *  tag 
)

◆ soap_att_size()

SOAP_FMAC1 size_t SOAP_FMAC2 soap_att_size ( struct soap_dom_element elt,
const char *  ns,
const char *  patt 
)

◆ soap_att_text()

SOAP_FMAC1 struct soap_dom_attribute* SOAP_FMAC2 soap_att_text ( struct soap_dom_attribute att,
const char *  text 
)

◆ soap_att_text_w()

SOAP_FMAC1 struct soap_dom_attribute* SOAP_FMAC2 soap_att_text_w ( struct soap_dom_attribute att,
const wchar_t *  text 
)

◆ soap_att_w()

SOAP_FMAC1 struct soap_dom_attribute* SOAP_FMAC2 soap_att_w ( struct soap_dom_element elt,
const char *  ns,
const wchar_t *  tag 
)

◆ soap_attachment()

SOAP_FMAC1 int SOAP_FMAC2 soap_attachment ( struct soap soap,
const char *  tag,
int  id,
const void *  p,
const void *  a,
int  n,
const char *  aid,
const char *  atype,
const char *  aoptions,
const char *  type,
int  t 
)

Definition at line 10217 of file stdsoap2.cpp.

10218 {
10219  struct soap_plist *pp;
10220  int i;
10221  if (!p || !a || (!aid && !atype) || (!soap->encodingStyle && !(soap->omode & (SOAP_ENC_DIME | SOAP_ENC_MIME | SOAP_ENC_MTOM | SOAP_XML_GRAPH))) || (soap->omode & SOAP_XML_TREE))
10222  return soap_element_id(soap, tag, id, p, a, n, type, t, NULL);
10223  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Attachment tag='%s' id='%s' (%d) type='%s'\n", tag, aid ? aid : SOAP_STR_EOS, id, atype ? atype : SOAP_STR_EOS));
10224  i = soap_array_pointer_lookup(soap, p, a, n, t, &pp);
10225  if (!i)
10226  {
10227  i = soap_pointer_enter(soap, p, a, n, t, &pp);
10228  if (!i)
10229  {
10230  soap->error = SOAP_EOM;
10231  return -1;
10232  }
10233  }
10234  if (id <= 0)
10235  id = i;
10236  if (!aid)
10237  {
10238  (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), strlen(soap->dime_id_format) + 20), soap->dime_id_format, id);
10239  aid = soap_strdup(soap, soap->tmpbuf);
10240  if (!aid)
10241  return -1;
10242  }
10243  /* Add MTOM xop:Include element when necessary */
10244  /* TODO: this code to be obsoleted with new import/xop.h conventions */
10245  if ((soap->omode & SOAP_ENC_MTOM) && strcmp(tag, "xop:Include"))
10246  {
10247  if (soap_element_begin_out(soap, tag, 0, type)
10248  || soap_element_href(soap, "xop:Include", 0, "xmlns:xop=\"http://www.w3.org/2004/08/xop/include\" href", aid)
10249  || soap_element_end_out(soap, tag))
10250  return soap->error;
10251  }
10252  else if (soap_element_href(soap, tag, 0, "href", aid))
10253  {
10254  return soap->error;
10255  }
10256  if ((soap->mode & SOAP_IO_LENGTH))
10257  {
10258  if (pp->mark1 != 3)
10259  {
10260  struct soap_multipart *content;
10261  if ((soap->omode & SOAP_ENC_MTOM))
10262  content = soap_alloc_multipart(soap, &soap->mime.first, &soap->mime.last, (const char*)a, n);
10263  else
10264  content = soap_alloc_multipart(soap, &soap->dime.first, &soap->dime.last, (const char*)a, n);
10265  if (!content)
10266  {
10267  soap->error = SOAP_EOM;
10268  return -1;
10269  }
10270  if (!strncmp(aid, "cid:", 4)) /* RFC 2111 */
10271  {
10272  if ((soap->omode & SOAP_ENC_MTOM))
10273  {
10274  size_t l = strlen(aid) - 1;
10275  char *s = (char*)soap_malloc(soap, l);
10276  if (s)
10277  {
10278  s[0] = '<';
10279  (void)soap_strncpy(s + 1, l - 1, aid + 4, l - 3);
10280  s[l - 2] = '>';
10281  s[l - 1] = '\0';
10282  content->id = s;
10283  }
10284  }
10285  else
10286  {
10287  content->id = aid + 4;
10288  }
10289  }
10290  else
10291  {
10292  content->id = aid;
10293  }
10294  content->type = atype;
10295  content->options = aoptions;
10296  content->encoding = SOAP_MIME_BINARY;
10297  pp->mark1 = 3;
10298  }
10299  }
10300  else
10301  {
10302  pp->mark2 = 3;
10303  }
10304  return -1;
10305 }
l
Definition: mpq.py:297
SOAP_FMAC1 char *SOAP_FMAC2 soap_strdup(struct soap *soap, const char *s)
Definition: stdsoap2.cpp:2789
SOAP_FMAC1 void *SOAP_FMAC2 soap_malloc(struct soap *soap, size_t n)
Definition: stdsoap2.cpp:10401
static struct soap_multipart * soap_alloc_multipart(struct soap *, struct soap_multipart **, struct soap_multipart **, const char *, size_t)
Definition: stdsoap2.cpp:20214
#define SOAP_STR_EOS
Definition: stdsoap2.cpp:348
SOAP_FMAC1 int SOAP_FMAC2 soap_element_id(struct soap *soap, const char *tag, int id, const void *p, const void *a, int n, const char *type, int t, char **mark)
Definition: stdsoap2.cpp:13647
SOAP_FMAC1 int SOAP_FMAC2 soap_element_href(struct soap *soap, const char *tag, int id, const char *ref, const char *val)
Definition: stdsoap2.cpp:13578
SOAP_FMAC1 int SOAP_FMAC2 soap_element_end_out(struct soap *soap, const char *tag)
Definition: stdsoap2.cpp:13499
#define SOAP_ENC_MIME
Definition: stdsoap2.h:1704
#define SOAP_ENC_MTOM
Definition: stdsoap2.h:1705
#define SOAP_IO_LENGTH
Definition: stdsoap2.h:1696
#define SOAP_ENC_DIME
Definition: stdsoap2.h:1703
struct soap_multipart * first
Definition: stdsoap2.h:2148
struct soap_multipart * last
Definition: stdsoap2.h:2148
struct soap_multipart * first
Definition: stdsoap2.h:2164
struct soap_multipart * last
Definition: stdsoap2.h:2164
const char * type
Definition: stdsoap2.h:2197
const char * options
Definition: stdsoap2.h:2198
enum soap_mime_encoding encoding
Definition: stdsoap2.h:2199
const char * id
Definition: stdsoap2.h:2196
struct soap_dime dime
Definition: stdsoap2.h:2881
const char * dime_id_format
Definition: stdsoap2.h:2674
struct soap_mime mime
Definition: stdsoap2.h:2882

References mpq::a, DBGLOG, soap::dime, soap::dime_id_format, soap_multipart::encoding, soap::encodingStyle, soap::error, soap_dime::first, soap_mime::first, soap_plist::id, soap_multipart::id, mpq::l, soap_dime::last, soap_mime::last, soap_plist::mark1, soap_plist::mark2, soap::mime, soap::mode, NULL, soap::omode, soap_multipart::options, soap_alloc_multipart(), soap_array_pointer_lookup(), soap_element_begin_out(), soap_element_end_out(), soap_element_href(), soap_element_id(), SOAP_ENC_DIME, SOAP_ENC_MIME, SOAP_ENC_MTOM, SOAP_EOM, SOAP_IO_LENGTH, soap_malloc(), SOAP_MIME_BINARY, soap_pointer_enter(), SOAP_SNPRINTF, SOAP_STR_EOS, soap_strdup(), soap_strncpy, SOAP_XML_GRAPH, SOAP_XML_TREE, TEST(), soap::tmpbuf, and soap_multipart::type.

◆ soap_attachment_forward()

SOAP_FMAC1 int SOAP_FMAC2 soap_attachment_forward ( struct soap soap,
unsigned char **  ptr,
int *  size,
char **  id,
char **  type,
char **  options 
)

Definition at line 2742 of file stdsoap2.cpp.

2743 {
2744  struct soap_xlist *xp;
2745  *ptr = NULL;
2746  *size = 0;
2747  *id = NULL;
2748  *type = NULL;
2749  *options = NULL;
2750  if (!*soap->href)
2751  return SOAP_OK;
2752  *id = soap_strdup(soap, soap->href);
2753  xp = (struct soap_xlist*)SOAP_MALLOC(soap, sizeof(struct soap_xlist));
2754  if (!xp)
2755  return soap->error = SOAP_EOM;
2756  xp->next = soap->xlist;
2757  xp->ptr = ptr;
2758  xp->size = size;
2759  xp->id = *id;
2760  xp->type = type;
2761  xp->options = options;
2762  soap->xlist = xp;
2763  return SOAP_OK;
2764 }
auto ptr(T p) -> const void *
Definition: format.h:2451
char ** type
Definition: stdsoap2.h:2216
char * id
Definition: stdsoap2.h:2215
struct soap_xlist * next
Definition: stdsoap2.h:2212
char ** options
Definition: stdsoap2.h:2217
unsigned char ** ptr
Definition: stdsoap2.h:2213
int * size
Definition: stdsoap2.h:2214
char href[SOAP_TAGLEN]
Definition: stdsoap2.h:2824
struct soap_xlist * xlist
Definition: stdsoap2.h:2883

References soap::error, soap::href, soap_xlist::id, soap_xlist::next, NULL, soap_xlist::options, ptr(), soap_xlist::ptr, soap_xlist::size, SOAP_EOM, SOAP_MALLOC, SOAP_OK, soap_strdup(), soap_xlist::type, and soap::xlist.

Referenced by soap_xop_forward().

◆ soap_attachment_reference()

SOAP_FMAC1 int SOAP_FMAC2 soap_attachment_reference ( struct soap soap,
const void *  p,
const void *  a,
int  n,
int  t,
const char *  id,
const char *  type 
)

Definition at line 10087 of file stdsoap2.cpp.

10088 {
10089  struct soap_plist *pp;
10090  if (!p || !a || (!soap->encodingStyle && !(soap->omode & SOAP_XML_GRAPH) && !id && !type) || (soap->omode & SOAP_XML_TREE))
10091  return 1;
10092  if (soap_array_pointer_lookup(soap, p, a, n, t, &pp))
10093  {
10094  if (pp->mark1 == 0)
10095  {
10096  pp->mark1 = 2;
10097  pp->mark2 = 2;
10098  }
10099  }
10100  else if (!soap_pointer_enter(soap, p, a, n, t, &pp))
10101  {
10102  return 1;
10103  }
10104  if (id || type)
10105  soap->mode |= SOAP_ENC_DIME;
10106  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Attachment reference %p ptr=%p n=%lu t=%d (%d %d)\n", p, a, (unsigned long)n, t, (int)pp->mark1, (int)pp->mark2));
10107  return pp->mark1;
10108 }

References mpq::a, DBGLOG, soap::encodingStyle, soap_plist::mark1, soap_plist::mark2, soap::mode, soap::omode, soap_array_pointer_lookup(), SOAP_ENC_DIME, soap_pointer_enter(), SOAP_XML_GRAPH, SOAP_XML_TREE, and TEST().

◆ soap_attr_value()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_attr_value ( struct soap soap,
const char *  name,
int  flag,
int  occurs 
)

Definition at line 14033 of file stdsoap2.cpp.

14034 {
14035  struct soap_attribute *tp;
14036  if (*name == '-')
14037  return SOAP_STR_EOS;
14038  for (tp = soap->attributes; tp; tp = tp->next)
14039  {
14040  if (tp->visible == 2 && !soap_match_att(soap, tp->name, name))
14041  break;
14042  }
14043  if (tp)
14044  {
14045  if (occurs == 4 || (occurs == 2 && (soap->mode & SOAP_XML_STRICT)))
14047  else if (flag >= 4)
14048  return soap_collapse(soap, tp->value, flag, 1);
14049  else
14050  return tp->value;
14051  }
14052  else if (occurs == 3 || (occurs == 1 && (soap->mode & SOAP_XML_STRICT)))
14053  {
14055  }
14056  else
14057  {
14058  soap->error = SOAP_OK;
14059  }
14060  return NULL;
14061 }
SOAP_FMAC1 int SOAP_FMAC2 soap_match_att(struct soap *soap, const char *tag1, const char *tag2)
Definition: stdsoap2.cpp:3847
static char * soap_collapse(struct soap *soap, char *s, int flag, int insitu)
Definition: stdsoap2.cpp:17456
#define SOAP_XML_STRICT
Definition: stdsoap2.h:1709
char name[1]
Definition: stdsoap2.h:2086
struct soap_attribute * next
Definition: stdsoap2.h:2080
char * value
Definition: stdsoap2.h:2082
struct soap_attribute * attributes
Definition: stdsoap2.h:2831

References soap::attributes, soap::error, soap_attribute::flag, soap::mode, soap_attribute::name, soap_attribute::next, NULL, soap_collapse(), soap_match_att(), SOAP_OK, SOAP_PROHIBITED, SOAP_REQUIRED, SOAP_STR_EOS, SOAP_XML_STRICT, soap_attribute::value, and soap_attribute::visible.

◆ soap_attribute()

SOAP_FMAC1 int SOAP_FMAC2 soap_attribute ( struct soap soap,
const char *  name,
const char *  value 
)

Definition at line 13829 of file stdsoap2.cpp.

13830 {
13831  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Attribute '%s'='%s'\n", name, value));
13832 #ifdef WITH_DOM
13833  if ((soap->mode & SOAP_XML_DOM) && !(soap->mode & SOAP_XML_CANONICAL) && soap->dom)
13834  {
13835  struct soap_dom_attribute *a = (struct soap_dom_attribute*)soap_malloc(soap, sizeof(struct soap_dom_attribute));
13836  if (!a)
13837  return soap->error;
13838  a->next = soap->dom->atts;
13839  a->nstr = NULL;
13840  a->name = soap_strdup(soap, name);
13841  a->text = soap_strdup(soap, value);
13842  a->soap = soap;
13843  soap->dom->atts = a;
13844  if (!a->name || (value && !a->text))
13845  return soap->error = SOAP_EOM;
13846  return SOAP_OK;
13847  }
13848 #endif
13849 #ifndef WITH_LEAN
13850  if ((soap->mode & SOAP_XML_CANONICAL))
13851  {
13852  /* push namespace */
13853  if (!strncmp(name, "xmlns", 5) && ((name[5] == ':') || name[5] == '\0'))
13854  {
13855  (void)soap_push_ns(soap, name + 5 + (name[5] == ':'), value, 0, 0);
13856  if (name[5] == '\0')
13858  else if (soap->c14ninclude && ((*soap->c14ninclude == '*' || soap_tagsearch(soap->c14ninclude, name + 6))))
13859  soap_utilize_ns(soap, name, 0);
13860  }
13861  else
13862  {
13863  soap->level--;
13864  if (soap_set_attr(soap, name, value, 1))
13865  return soap->error;
13866  soap->level++;
13867  }
13868  }
13869  else
13870 #endif
13871  {
13872  if (soap_send_raw(soap, " ", 1)
13873  || soap_send(soap, name))
13874  return soap->error;
13875  if (value)
13876  if (soap_send_raw(soap, "=\"", 2)
13877  || soap_string_out(soap, value, 1)
13878  || soap_send_raw(soap, "\"", 1))
13879  return soap->error;
13880  }
13881  return SOAP_OK;
13882 }
Definition: core.h:1120
SOAP_FMAC1 int SOAP_FMAC2 soap_send_raw(struct soap *soap, const char *s, size_t n)
Definition: stdsoap2.cpp:825
SOAP_FMAC1 int SOAP_FMAC2 soap_string_out(struct soap *soap, const char *s, int flag)
Definition: stdsoap2.cpp:15054
SOAP_FMAC1 const char *SOAP_FMAC2 soap_tagsearch(const char *big, const char *little)
Definition: stdsoap2.cpp:12610
static struct soap_nlist * soap_push_ns(struct soap *soap, const char *id, const char *ns, short utilized, short isearly)
Definition: stdsoap2.cpp:12657
SOAP_FMAC1 int SOAP_FMAC2 soap_send(struct soap *soap, const char *s)
Definition: stdsoap2.cpp:949
SOAP_FMAC1 int SOAP_FMAC2 soap_set_attr(struct soap *soap, const char *name, const char *value, int flag)
Definition: stdsoap2.cpp:14068
struct SOAP_CMAC soap
Definition: stdsoap2.h:1997
#define SOAP_XML_DOM
Definition: stdsoap2.h:1729
const char * name
Definition: stdsoap2.h:2384
struct soap_dom_attribute * atts
Definition: stdsoap2.h:2488
const char * c14ninclude
Definition: stdsoap2.h:2891
unsigned int level
Definition: stdsoap2.h:2810
struct soap_dom_element * dom
Definition: stdsoap2.h:2880

References mpq::a, soap_dom_element::atts, soap::c14ninclude, DBGLOG, soap::dom, soap::error, soap::level, soap::mode, name, soap_dom_attribute::name, NULL, soap, SOAP_EOM, soap_malloc(), SOAP_OK, soap_push_ns(), soap_send(), soap_send_raw(), soap_set_attr(), SOAP_STR_EOS, soap_strdup(), soap_string_out(), soap_tagsearch(), soap_utilize_ns(), SOAP_XML_CANONICAL, SOAP_XML_DOM, and TEST().

Referenced by soap_array_begin_out(), soap_element(), soap_element_href(), soap_element_nil(), soap_element_null(), and soap_element_result().

◆ soap_base642s()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_base642s ( struct soap soap,
const char *  s,
char *  t,
size_t  l,
int *  n 
)

Definition at line 21630 of file stdsoap2.cpp.

21631 {
21632  size_t i, j;
21633  soap_wchar c;
21634  unsigned long m;
21635  const char *p;
21636  if (!s || !*s)
21637  {
21638  if (n)
21639  *n = 0;
21640  if (soap->error)
21641  return NULL;
21642  return SOAP_NON_NULL;
21643  }
21644  if (!t)
21645  {
21646  l = (strlen(s) + 3) / 4 * 3 + 1; /* space for raw binary and \0 */
21647  t = (char*)soap_malloc(soap, l);
21648  }
21649  if (!t)
21650  return NULL;
21651  p = t;
21652  if (n)
21653  *n = 0;
21654  for (i = 0; ; i += 3, l -= 3)
21655  {
21656  m = 0;
21657  j = 0;
21658  while (j < 4)
21659  {
21660  c = *s++;
21661  if (c == '=' || !c)
21662  {
21663  if (l >= j - 1)
21664  {
21665  switch (j)
21666  {
21667  case 2:
21668  *t++ = (char)((m >> 4) & 0xFF);
21669  i++;
21670  l--;
21671  break;
21672  case 3:
21673  *t++ = (char)((m >> 10) & 0xFF);
21674  *t++ = (char)((m >> 2) & 0xFF);
21675  i += 2;
21676  l -= 2;
21677  }
21678  }
21679  if (n)
21680  *n = (int)i;
21681  if (l)
21682  *t = '\0';
21683  return p;
21684  }
21685  c -= '+';
21686  if (c >= 0 && c <= 79)
21687  {
21688  int b = soap_base64i[c];
21689  if (b >= 64)
21690  {
21691  soap->error = SOAP_TYPE;
21692  return NULL;
21693  }
21694  m = (m << 6) + b;
21695  j++;
21696  }
21697  else if (!soap_coblank(c + '+'))
21698  {
21699  soap->error = SOAP_TYPE;
21700  return NULL;
21701  }
21702  }
21703  if (l < 3)
21704  {
21705  if (n)
21706  *n = (int)i;
21707  if (l)
21708  *t = '\0';
21709  return p;
21710  }
21711  *t++ = (char)((m >> 16) & 0xFF);
21712  *t++ = (char)((m >> 8) & 0xFF);
21713  *t++ = (char)(m & 0xFF);
21714  }
21715 }
list c
Definition: mpq.py:295
const prof_gctx_t * b
Definition: prof.c:277
const char soap_base64i[81]
Definition: stdsoap2.cpp:333
#define soap_coblank(c)
Definition: stdsoap2.cpp:114
#define SOAP_NON_NULL
Definition: stdsoap2.cpp:349
soap_int32 soap_wchar
Definition: stdsoap2.h:1994

References b, mpq::c, soap::error, mpq::l, NULL, soap_base64i, soap_coblank, soap_malloc(), SOAP_NON_NULL, and SOAP_TYPE.

Referenced by http_parse_header(), and soap_getbase64().

◆ soap_begin()

SOAP_FMAC1 void SOAP_FMAC2 soap_begin ( struct soap soap)

Definition at line 12402 of file stdsoap2.cpp.

12403 {
12404  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Clean up for input/output\n"));
12405  soap->error = SOAP_OK;
12406  if (!soap->keep_alive)
12407  {
12408  soap->buflen = 0;
12409  soap->bufidx = 0;
12410  }
12411  soap->encoding = 0;
12412  soap->mode = 0;
12413  soap->part = SOAP_END;
12414  soap->peeked = 0;
12415  soap->ahead = 0;
12416  soap->level = 0;
12417  *soap->endpoint = '\0';
12420 }
SOAP_FMAC1 void SOAP_FMAC2 soap_free_temp(struct soap *soap)
Definition: stdsoap2.cpp:11513
#define SOAP_END
Definition: stdsoap2.h:1776
size_t buflen
Definition: stdsoap2.h:2806
soap_wchar ahead
Definition: stdsoap2.h:2807
size_t bufidx
Definition: stdsoap2.h:2805
short encoding
Definition: stdsoap2.h:2834
short part
Definition: stdsoap2.h:2838
short peeked
Definition: stdsoap2.h:2840
char endpoint[SOAP_TAGLEN]
Definition: stdsoap2.h:2845

References soap::ahead, soap::bufidx, soap::buflen, DBGLOG, soap::encoding, soap::encodingStyle, soap::endpoint, soap::error, soap::fdebug, soap::keep_alive, soap::level, soap::mode, soap::part, soap::peeked, SOAP_END, soap_free_temp(), SOAP_OK, SOAP_STR_EOS, and TEST().

Referenced by soap_begin_serve().

◆ soap_begin_count()

SOAP_FMAC1 int SOAP_FMAC2 soap_begin_count ( struct soap soap)

Definition at line 9744 of file stdsoap2.cpp.

9745 {
9746  soap_free_ns(soap);
9747  soap->error = SOAP_OK;
9748 #ifndef WITH_LEANER
9749  if ((soap->mode & SOAP_ENC_DIME) || (soap->omode & SOAP_ENC_DIME))
9750  {
9752  }
9753  else
9754 #endif
9755  {
9756  soap->mode = soap->omode;
9757  if ((soap->mode & SOAP_IO_UDP))
9758  {
9759  soap->mode &= SOAP_IO;
9761  }
9762  if ((soap->mode & SOAP_IO) == SOAP_IO_STORE
9763  || (((soap->mode & SOAP_IO) == SOAP_IO_CHUNK || (soap->mode & SOAP_ENC_PLAIN))
9764 #ifndef WITH_LEANER
9765  && !soap->fpreparesend
9766 #endif
9767  ))
9768  soap->mode &= ~SOAP_IO_LENGTH;
9769  else
9770  soap->mode |= SOAP_IO_LENGTH;
9771  }
9772 #ifdef WITH_ZLIB
9773  if ((soap->mode & SOAP_ENC_ZLIB) && (soap->mode & SOAP_IO) == SOAP_IO_FLUSH)
9774  {
9775  if (!(soap->mode & SOAP_ENC_DIME))
9776  soap->mode &= ~SOAP_IO_LENGTH;
9777  if ((soap->mode & SOAP_ENC_PLAIN))
9778  soap->mode |= SOAP_IO_BUFFER;
9779  else
9780  soap->mode |= SOAP_IO_STORE;
9781  }
9782 #endif
9783 #ifndef WITH_LEANER
9784  if ((soap->mode & SOAP_ENC_MTOM) && (soap->mode & SOAP_ENC_DIME))
9785  soap->mode |= SOAP_ENC_MIME;
9786  else if (!(soap->mode & SOAP_ENC_MIME))
9787  soap->mode &= ~SOAP_ENC_MTOM;
9788  if ((soap->mode & SOAP_ENC_MIME))
9790  soap->dime.list = soap->dime.last; /* keep track of last DIME attachment */
9791 #endif
9792  soap->count = 0;
9793  soap->ns = 0;
9794  soap->null = 0;
9795  soap->position = 0;
9796  soap->mustUnderstand = 0;
9797  soap->encoding = 0;
9799  soap->event = 0;
9800  soap->evlev = 0;
9801  soap->idnum = 0;
9802  soap->body = 1;
9803  soap->level = 0;
9806 #ifndef WITH_LEANER
9807  soap->dime.size = 0; /* accumulate total size of attachments */
9809  return soap->error;
9810 #endif
9811  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Begin count phase (socket=%d mode=0x%x count=" SOAP_ULONG_FORMAT ")\n", (int)soap->socket, (unsigned int)soap->mode, soap->count));
9812 #ifndef WITH_LEANER
9813  if ((soap->mode & SOAP_IO_LENGTH))
9814  return soap_begin_attachments(soap);
9815 #endif
9816  return SOAP_OK;
9817 }
fno inline small functions fno default inline endif() message("Unit tests code coverage
Definition: CMakeLists.txt:151
static int soap_begin_attachments(struct soap *)
Definition: stdsoap2.cpp:20137
SOAP_FMAC1 void SOAP_FMAC2 soap_clr_attr(struct soap *soap)
Definition: stdsoap2.cpp:14212
static void soap_free_ns(struct soap *)
Definition: stdsoap2.cpp:11568
static void soap_select_mime_boundary(struct soap *)
Definition: stdsoap2.cpp:20296
SOAP_FMAC1 void SOAP_FMAC2 soap_set_local_namespaces(struct soap *soap)
Definition: stdsoap2.cpp:12576
#define SOAP_BEGIN_SEND
Definition: stdsoap2.h:1777
#define SOAP_IO_BUFFER
Definition: stdsoap2.h:1691
#define SOAP_ULONG_FORMAT
Definition: stdsoap2.h:1102
#define SOAP_ENC_PLAIN
Definition: stdsoap2.h:1701
#define SOAP_IO_FLUSH
Definition: stdsoap2.h:1690
#define SOAP_IO
Definition: stdsoap2.h:1689
#define SOAP_IO_CHUNK
Definition: stdsoap2.h:1693
#define SOAP_IO_STORE
Definition: stdsoap2.h:1692
#define SOAP_ENC_ZLIB
Definition: stdsoap2.h:1706
struct soap_multipart * list
Definition: stdsoap2.h:2147
size_t size
Definition: stdsoap2.h:2139
short mustUnderstand
Definition: stdsoap2.h:2835
unsigned int evlev
Definition: stdsoap2.h:2841
int idnum
Definition: stdsoap2.h:2718
short body
Definition: stdsoap2.h:2809
int(* fprepareinitsend)(struct soap *)
Definition: stdsoap2.h:2765
ULONG64 count
Definition: stdsoap2.h:2814
int(* fpreparesend)(struct soap *, const char *, size_t)
Definition: stdsoap2.h:2767
short event
Definition: stdsoap2.h:2839
short null
Definition: stdsoap2.h:2836
int position
Definition: stdsoap2.h:2829
short ns
Definition: stdsoap2.h:2837

References soap::body, soap::count, DBGLOG, soap::dime, soap::encoding, endif(), soap::error, soap::event, soap::evlev, soap::fprepareinitsend, soap::fpreparesend, soap::idnum, soap_dime::last, soap::level, soap_dime::list, soap::mode, soap::mustUnderstand, soap::ns, soap::null, soap::omode, soap::part, soap::position, soap_dime::size, soap_begin_attachments(), SOAP_BEGIN_SEND, soap_clr_attr(), SOAP_ENC_DIME, SOAP_ENC_MIME, SOAP_ENC_MTOM, SOAP_ENC_PLAIN, SOAP_ENC_ZLIB, soap_free_ns(), SOAP_IO, SOAP_IO_BUFFER, SOAP_IO_CHUNK, SOAP_IO_FLUSH, SOAP_IO_LENGTH, SOAP_IO_STORE, SOAP_IO_UDP, SOAP_OK, soap_select_mime_boundary(), soap_set_local_namespaces(), SOAP_ULONG_FORMAT, soap::socket, and TEST().

Referenced by soap_send_fault(), and soap_serve_ns1__executeCommand().

◆ soap_begin_recv()

SOAP_FMAC1 int SOAP_FMAC2 soap_begin_recv ( struct soap soap)

Definition at line 20447 of file stdsoap2.cpp.

20448 {
20449  soap_wchar c;
20450  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Initializing for input from socket=%d/fd=%d\n", (int)soap->socket, soap->recvfd));
20451  soap->error = SOAP_OK;
20452 #ifndef WITH_LEANER
20453  soap->recverror = SOAP_OK;
20454 #endif
20457  soap->version = 0; /* don't assume we're parsing SOAP content by default */
20458 #ifndef WITH_NOIDREF
20460 #endif
20461  if ((soap->imode & SOAP_IO) == SOAP_IO_CHUNK)
20462  {
20463  soap->imode &= ~SOAP_IO;
20465  }
20467  soap->mode = soap->imode;
20468  if (!(soap->mode & SOAP_IO_KEEPALIVE))
20469  soap->keep_alive = 0;
20470  if (!soap->keep_alive)
20471  soap->buflen = soap->bufidx = 0;
20472  soap->null = 0;
20473  soap->position = 0;
20474  soap->mustUnderstand = 0;
20475  soap->shaky = 0;
20476  soap->ahead = 0;
20477  soap->peeked = 0;
20478  soap->level = 0;
20480  soap->count = 0;
20481  soap->length = 0;
20482  soap->cdata = 0;
20483  *soap->endpoint = '\0';
20484  soap->action = NULL;
20485  soap->header = NULL;
20486  soap->fault = NULL;
20487  soap->status = 0;
20488  soap->fform = NULL;
20489  soap->body = 1;
20490 #ifndef WITH_LEANER
20491  soap->dom = NULL;
20492  soap->dime.count = 0;
20493  soap->dime.chunksize = 0;
20494  soap->dime.buflen = 0;
20495  soap->dime.list = NULL;
20496  soap->dime.first = NULL;
20497  soap->dime.last = NULL;
20498  soap->mime.list = NULL;
20499  soap->mime.first = NULL;
20500  soap->mime.last = NULL;
20501  soap->mime.boundary = NULL;
20502  soap->mime.start = NULL;
20503 #endif
20504 #ifdef WIN32
20505 #ifndef UNDER_CE
20506 #ifndef WITH_FASTCGI
20507  if (!soap_valid_socket(soap->socket) && !soap->is && soap->recvfd >= 0) /* Set win32 stdin or soap->recvfd to BINARY, e.g. to support DIME */
20508 #ifdef __BORLANDC__
20509  setmode(soap->recvfd, _O_BINARY);
20510 #else
20511  _setmode(soap->recvfd, _O_BINARY);
20512 #endif
20513 #endif
20514 #endif
20515 #endif
20516 #ifdef WITH_ZLIB
20519  if (!soap->d_stream)
20520  {
20521  soap->d_stream = (z_stream*)SOAP_MALLOC(soap, sizeof(z_stream));
20522  if (!soap->d_stream)
20523  return soap->error = SOAP_EOM;
20524  soap->d_stream->zalloc = Z_NULL;
20525  soap->d_stream->zfree = Z_NULL;
20526  soap->d_stream->opaque = Z_NULL;
20527  soap->d_stream->next_in = Z_NULL;
20528  soap->d_stream->msg = Z_NULL;
20529  }
20530  soap->d_stream->avail_in = 0;
20531  soap->d_stream->next_out = (Byte*)soap->buf;
20532  soap->d_stream->avail_out = sizeof(soap->buf);
20533  soap->z_ratio_in = 1.0;
20534 #endif
20535 #ifdef WITH_OPENSSL
20536  if (soap->ssl)
20537  ERR_clear_error();
20538 #endif
20539 #ifndef WITH_LEAN
20540  soap->start = (ULONG64)time(NULL);
20541 #endif
20542 #ifndef WITH_LEANER
20544  return soap->error;
20545 #endif
20546  c = soap_getchar(soap);
20547 #ifdef WITH_GZIP
20548  if (c == 0x1F)
20549  {
20550  if (soap_getgziphdr(soap))
20551  return soap->error;
20553  return soap->error = SOAP_ZLIB_ERROR;
20554  if (soap->z_dict)
20555  {
20557  return soap->error = SOAP_ZLIB_ERROR;
20558  }
20560  soap->mode |= SOAP_ENC_ZLIB;
20562  soap->z_crc = crc32(0L, NULL, 0);
20563  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "gzip initialized\n"));
20564  if (!soap->z_buf)
20565  soap->z_buf = (char*)SOAP_MALLOC(soap, sizeof(soap->buf));
20566  (void)soap_memcpy((void*)soap->z_buf, sizeof(soap->buf), (const void*)soap->buf, sizeof(soap->buf));
20567  /* should not chunk over plain transport, so why bother to check? */
20568  /* if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK) */
20569  /* soap->z_buflen = soap->bufidx; */
20570  /* else */
20571  soap->d_stream->next_in = (Byte*)(soap->z_buf + soap->bufidx);
20572  soap->d_stream->avail_in = (unsigned int)(soap->buflen - soap->bufidx);
20573  soap->z_buflen = soap->buflen;
20574  soap->buflen = soap->bufidx;
20575  c = ' ';
20576  }
20577 #endif
20578  while (soap_coblank(c))
20579  c = soap_getchar(soap);
20580 #ifndef WITH_LEANER
20581  if (c == '-' && soap_get0(soap) == '-')
20582  {
20583  soap->mode |= SOAP_ENC_MIME;
20584  }
20585  else if ((c & 0xFFFC) == (SOAP_DIME_VERSION | SOAP_DIME_MB) && (soap_get0(soap) & 0xFFF0) == 0x20)
20586  {
20587  soap->mode |= SOAP_ENC_DIME;
20588  }
20589  else
20590 #endif
20591  {
20592  /* skip BOM */
20593  if (c == 0xEF && soap_get0(soap) == 0xBB)
20594  {
20595  soap_get1(soap);
20596  c = soap_get1(soap);
20597  if (c == 0xBF)
20598  {
20599  soap->mode &= ~SOAP_ENC_LATIN;
20600  c = soap_getchar(soap);
20601  }
20602  else
20603  {
20604  c = (0x0F << 12) | (0xBB << 6) | (c & 0x3F); /* UTF-8 */
20605  }
20606  }
20607  else if ((c == 0xFE && soap_get0(soap) == 0xFF) /* UTF-16 BE */
20608  || (c == 0xFF && soap_get0(soap) == 0xFE)) /* UTF-16 LE */
20609  {
20610  return soap->error = SOAP_UTF_ERROR;
20611  }
20612  /* skip space */
20613  while (soap_coblank(c))
20614  c = soap_getchar(soap);
20615  }
20616  if ((int)c == EOF)
20617  return soap->error = SOAP_CHK_EOF;
20618  soap_unget(soap, c);
20619 #ifndef WITH_NOHTTP
20620  /* if not XML/MIME/DIME/ZLIB, assume HTTP method or status line */
20621  if (((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) && !(soap->mode & (SOAP_ENC_MIME | SOAP_ENC_DIME | SOAP_ENC_ZLIB | SOAP_ENC_PLAIN)))
20622  {
20623  soap_mode m = soap->imode;
20624  soap->error = soap->fparse(soap);
20625  soap->mode = soap->imode; /* if imode is changed, effectuate */
20626  soap->imode = m; /* restore imode */
20627  if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK)
20628  {
20630  soap->buflen = soap->bufidx;
20631  soap->chunksize = 0;
20632  }
20633 #ifdef WITH_ZLIB
20634  soap->mode &= ~SOAP_ENC_ZLIB;
20635  if (soap->zlib_in != SOAP_ZLIB_NONE)
20636  {
20637 #ifdef WITH_GZIP
20638  if (soap->zlib_in != SOAP_ZLIB_DEFLATE)
20639  {
20640  c = soap_get1(soap);
20641  if (c == (int)EOF)
20642  return soap->error = SOAP_EOF;
20643  if (c == 0x1F)
20644  {
20645  if (soap_getgziphdr(soap))
20646  return soap->error;
20648  return soap->error = SOAP_ZLIB_ERROR;
20649  soap->z_crc = crc32(0L, NULL, 0);
20650  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "gzip initialized\n"));
20651  }
20652  else
20653  {
20654  soap_revget1(soap);
20655  if (inflateInit(soap->d_stream) != Z_OK)
20656  return soap->error = SOAP_ZLIB_ERROR;
20658  }
20659  }
20660  else
20661 #endif
20662  if (inflateInit(soap->d_stream) != Z_OK)
20663  return soap->error = SOAP_ZLIB_ERROR;
20664  if (soap->z_dict)
20665  {
20667  return soap->error = SOAP_ZLIB_ERROR;
20668  }
20670  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflate initialized\n"));
20671  soap->mode |= SOAP_ENC_ZLIB;
20672  if (!soap->z_buf)
20673  soap->z_buf = (char*)SOAP_MALLOC(soap, sizeof(soap->buf));
20674  (void)soap_memcpy((void*)soap->z_buf, sizeof(soap->buf), (const void*)soap->buf, sizeof(soap->buf));
20675  soap->d_stream->next_in = (Byte*)(soap->z_buf + soap->bufidx);
20676  soap->d_stream->avail_in = (unsigned int)(soap->buflen - soap->bufidx);
20677  soap->z_buflen = soap->buflen;
20678  soap->buflen = soap->bufidx;
20679  }
20680 #endif
20681 #ifndef WITH_LEANER
20683  {
20684  int r;
20685  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Invoking fpreparerecv\n"));
20687  if (r)
20688  return soap->error = r;
20689  }
20690 #endif
20691  if (soap->error && soap->error < SOAP_STOP)
20692  {
20693  if (soap->status >= 200 && soap->status < 600)
20694  {
20695  const char *s = soap_http_get_body(soap, NULL);
20696  (void)soap_end_recv(soap);
20697  if (soap->status >= 300)
20698  soap->keep_alive = 0; /* to force close */
20699  return soap_set_receiver_error(soap, "HTTP Error", s, soap->status);
20700  }
20701  return soap->error;
20702  }
20703  if (!soap->body && soap->status >= 200 && soap->status < 600)
20704  return soap->error = soap->status; /* client side received HTTP status code */
20705  if (soap->status > SOAP_POST)
20706  {
20707  soap->fform = NULL;
20708  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Invoking http method handler\n"));
20709  switch (soap->status)
20710  {
20711  case SOAP_GET:
20713  return soap->error;
20714  soap->error = soap->fget(soap);
20715  break;
20716  case SOAP_PUT:
20717  soap->error = soap->fput(soap);
20718  break;
20719  case SOAP_PATCH:
20720  soap->error = soap->fpatch(soap);
20721  break;
20722  case SOAP_DEL:
20724  return soap->error;
20725  soap->error = soap->fdel(soap);
20726  break;
20727  case SOAP_HEAD:
20729  return soap->error;
20730  soap->error = soap->fhead(soap);
20731  break;
20732  case SOAP_OPTIONS:
20734  return soap->error;
20735  soap->error = soap->fopt(soap);
20736  break;
20737  default:
20739  return soap->error;
20740  return 405;
20741  }
20742  if (soap->error == SOAP_OK)
20743  return soap->error = SOAP_STOP; /* prevents further processing */
20744  if (soap->error != SOAP_FORM || !soap->fform) /* continue if handler returned SOAP_FORM */
20745  return soap->error;
20746  soap->error = SOAP_OK;
20747  }
20748  if (soap->fform)
20749  {
20750  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Invoking http form handler\n"));
20751  soap->error = soap->fform(soap);
20752  if (soap->error == SOAP_OK)
20753  return soap->error = SOAP_STOP; /* prevents further processing */
20754  if (soap->status != SOAP_POST || soap->error != 404) /* continue with POST if handler returned HTTP not found */
20755  return soap->error;
20756  soap->error = SOAP_OK;
20757  }
20758  if (!soap->body)
20759  return soap->error = SOAP_NO_DATA;
20760  }
20761 #endif
20762 #ifndef WITH_LEANER
20763  if ((soap->mode & SOAP_ENC_MIME))
20764  {
20765  do /* skip preamble */
20766  {
20767  c = soap_getchar(soap);
20768  if ((int)c == EOF)
20769  return soap->error = SOAP_CHK_EOF;
20770  } while (c != '-' || soap_get0(soap) != '-');
20771  soap_unget(soap, c);
20772  if (soap_getmimehdr(soap))
20773  return soap->error;
20774  if (soap->mime.start)
20775  {
20776  do
20777  {
20778  if (!soap->mime.last->id)
20779  break;
20781  break;
20782  } while (soap_recv_mime_attachment(soap, NULL));
20783  }
20784  if (soap_http_header_attribute(soap, soap->mime.first->type, "application/dime"))
20785  soap->mode |= SOAP_ENC_DIME;
20786  }
20787  if ((soap->mode & SOAP_ENC_DIME))
20788  {
20789  if (soap_getdimehdr(soap))
20790  return soap->error;
20791  if ((soap->dime.flags & SOAP_DIME_CF))
20792  {
20793  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunked SOAP in DIME message\n"));
20795  if (soap->buflen - soap->bufidx >= soap->dime.chunksize)
20796  {
20797  soap->dime.buflen = soap->buflen;
20799  }
20800  else
20801  {
20803  }
20804  }
20805  soap->count = soap->buflen - soap->bufidx;
20807  return soap->error = SOAP_EOF;
20808  }
20809 #endif
20810  return SOAP_OK;
20811 }
int ZEXPORT inflateSetDictionary(z_streamp strm, const Bytef *dictionary, uInt dictLength)
Definition: inflate.c:1267
ulong crc32(ulong crc, const uchar *buf, uint len)
static void soap_free_iht(struct soap *)
Definition: stdsoap2.cpp:10324
SOAP_FMAC1 char *SOAP_FMAC2 soap_http_get_body(struct soap *soap, size_t *len)
Definition: stdsoap2.cpp:20895
SOAP_FMAC1 int SOAP_FMAC2 soap_http_skip_body(struct soap *soap)
Definition: stdsoap2.cpp:20857
SOAP_FMAC1 struct soap_multipart *SOAP_FMAC2 soap_recv_mime_attachment(struct soap *soap, void *handle)
Definition: stdsoap2.cpp:19700
SOAP_FMAC1 int SOAP_FMAC2 soap_getdimehdr(struct soap *soap)
Definition: stdsoap2.cpp:19391
SOAP_FMAC1 const char *SOAP_FMAC2 soap_http_header_attribute(struct soap *soap, const char *line, const char *key)
Definition: stdsoap2.cpp:7858
SOAP_FMAC1 int SOAP_FMAC2 soap_end_recv(struct soap *soap)
Definition: stdsoap2.cpp:11393
SOAP_FMAC1 int SOAP_FMAC2 soap_getmimehdr(struct soap *soap)
Definition: stdsoap2.cpp:19586
SOAP_FMAC1 int SOAP_FMAC2 soap_match_cid(struct soap *soap, const char *s, const char *t)
Definition: stdsoap2.cpp:19867
SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_getchar(struct soap *soap)
Definition: stdsoap2.cpp:1742
#define SOAP_FORM
Definition: stdsoap2.h:1651
#define SOAP_PATCH
Definition: stdsoap2.h:1663
#define SOAP_DIME_MB
Definition: stdsoap2.h:1673
#define SOAP_CHK_EOF
Definition: stdsoap2.h:1012
#define soap_unget(soap, c)
Definition: stdsoap2.h:3059
#define SOAP_ZLIB_DEFLATE
Definition: stdsoap2.h:1681
#define SOAP_HEAD
Definition: stdsoap2.h:1665
#define SOAP_PUT
Definition: stdsoap2.h:1662
#define SOAP_GET
Definition: stdsoap2.h:1661
#define SOAP_POST
Definition: stdsoap2.h:1659
#define soap_revget1(soap)
Definition: stdsoap2.h:3058
#define SOAP_ENC_LATIN
Definition: stdsoap2.h:1700
#define SOAP_ZLIB_NONE
Definition: stdsoap2.h:1680
#define SOAP_DEL
Definition: stdsoap2.h:1664
#define ULONG64
Definition: stdsoap2.h:1086
soap_int32 soap_mode
Definition: stdsoap2.h:1687
#define SOAP_ZLIB_INFLATE
Definition: stdsoap2.h:1682
#define soap_get1(soap)
Definition: stdsoap2.h:3040
#define SOAP_STOP
Definition: stdsoap2.h:1650
#define SOAP_ZLIB_ERROR
Definition: stdsoap2.h:1559
#define SOAP_DIME_VERSION
Definition: stdsoap2.h:1674
#define SOAP_OPTIONS
Definition: stdsoap2.h:1666
#define SOAP_BEGIN_RECV
Definition: stdsoap2.h:1778
#define SOAP_DIME_CF
Definition: stdsoap2.h:1671
#define SOAP_ZLIB_GZIP
Definition: stdsoap2.h:1683
#define soap_get0(soap)
Definition: stdsoap2.h:3039
size_t chunksize
Definition: stdsoap2.h:2140
size_t buflen
Definition: stdsoap2.h:2141
char flags
Definition: stdsoap2.h:2142
size_t count
Definition: stdsoap2.h:2138
const char * start
Definition: stdsoap2.h:2162
char * boundary
Definition: stdsoap2.h:2161
struct soap_multipart * list
Definition: stdsoap2.h:2163
int(* fprepareinitrecv)(struct soap *)
Definition: stdsoap2.h:2766
short cdata
Definition: stdsoap2.h:2808
int recvfd
Definition: stdsoap2.h:2800
soap_int32 z_crc
Definition: stdsoap2.h:2968
int(* fform)(struct soap *)
Definition: stdsoap2.h:2737
size_t chunksize
Definition: stdsoap2.h:2843
int(* fpreparerecv)(struct soap *, const char *, size_t)
Definition: stdsoap2.h:2768
ULONG64 recv_maxlength
Definition: stdsoap2.h:2675
short zlib_in
Definition: stdsoap2.h:2973
int(* fdel)(struct soap *)
Definition: stdsoap2.h:2734
short zlib_state
Definition: stdsoap2.h:2972
int(* fput)(struct soap *)
Definition: stdsoap2.h:2732
int(* fpatch)(struct soap *)
Definition: stdsoap2.h:2733
void * ssl
Definition: stdsoap2.h:2943
void * d_stream
Definition: stdsoap2.h:2967
unsigned int z_dict_len
Definition: stdsoap2.h:2971
float z_ratio_in
Definition: stdsoap2.h:2978
ULONG64 length
Definition: stdsoap2.h:2815
short shaky
Definition: stdsoap2.h:2715
int(* fget)(struct soap *)
Definition: stdsoap2.h:2731
const char * z_dict
Definition: stdsoap2.h:2970
struct SOAP_ENV__Fault * fault
Definition: stdsoap2.h:2717
size_t chunkbuflen
Definition: stdsoap2.h:2844
const char * is
Definition: stdsoap2.h:2796
int(* fhead)(struct soap *)
Definition: stdsoap2.h:2736
int recverror
Definition: stdsoap2.h:2771
int(* fopt)(struct soap *)
Definition: stdsoap2.h:2735
int(* fparse)(struct soap *)
Definition: stdsoap2.h:2740
ULONG64 start
Definition: stdsoap2.h:2812
struct SOAP_ENV__Header * header
Definition: stdsoap2.h:2716
char * action
Definition: stdsoap2.h:2848
char buf[SOAP_BUFLEN]
Definition: stdsoap2.h:2819
size_t z_buflen
Definition: stdsoap2.h:2976
int status
Definition: stdsoap2.h:2875
short zlib_out
Definition: stdsoap2.h:2974
char * z_buf
Definition: stdsoap2.h:2975
#define MAX_WBITS
Definition: zconf.h:244
unsigned char Byte
Definition: zconf.h:365
Byte FAR Bytef
Definition: zconf.h:374
#define inflateInit2(strm, windowBits)
Definition: zlib.h:1637
#define Z_OK
Definition: zlib.h:173
#define Z_NULL
Definition: zlib.h:208
#define inflateInit(strm)
Definition: zlib.h:1632

References soap::action, soap::ahead, soap::body, soap_mime::boundary, soap::buf, soap::bufidx, soap_dime::buflen, soap::buflen, mpq::c, soap::cdata, soap::chunkbuflen, soap_dime::chunksize, soap::chunksize, soap_dime::count, soap::count, crc32(), soap::d_stream, DBGLOG, soap::dime, soap::dom, endif(), soap::endpoint, soap::error, soap::fault, soap::fdel, soap::fform, soap::fget, soap::fhead, soap_dime::first, soap_mime::first, soap_dime::flags, soap::fopt, soap::fparse, soap::fpatch, soap::fprepareinitrecv, soap::fpreparerecv, soap::fput, soap::header, soap_multipart::id, if(), soap::imode, inflateInit, inflateInit2, inflateSetDictionary(), soap::is, soap::keep_alive, soap_dime::last, soap_mime::last, soap::length, soap::level, soap_dime::list, soap_mime::list, MAX_WBITS, soap::mime, soap::mode, soap::mustUnderstand, soap::null, NULL, soap::omode, soap::part, soap::peeked, soap::position, soap::recv_maxlength, soap::recverror, soap::recvfd, soap::shaky, soap_dime::size, SOAP_BEGIN_RECV, SOAP_CHK_EOF, soap_coblank, SOAP_DEL, SOAP_DIME_CF, SOAP_DIME_MB, SOAP_DIME_VERSION, SOAP_ENC_DIME, SOAP_ENC_LATIN, SOAP_ENC_MIME, SOAP_ENC_PLAIN, SOAP_ENC_ZLIB, soap_end_recv(), SOAP_EOF, SOAP_EOM, SOAP_FORM, soap_free_iht(), soap_free_temp(), SOAP_GET, soap_get0, soap_get1, soap_getchar(), soap_getdimehdr(), soap_getmimehdr(), SOAP_HEAD, soap_http_get_body(), soap_http_header_attribute(), soap_http_skip_body(), SOAP_IO, SOAP_IO_CHUNK, SOAP_IO_KEEPALIVE, SOAP_MALLOC, soap_match_cid(), soap_memcpy, SOAP_NO_DATA, SOAP_OK, SOAP_OPTIONS, SOAP_PATCH, SOAP_POST, SOAP_PUT, soap_recv_mime_attachment(), soap_revget1, soap_set_local_namespaces(), soap_set_receiver_error(), SOAP_STOP, soap_unget, SOAP_UTF_ERROR, soap_valid_socket, SOAP_ZLIB_DEFLATE, SOAP_ZLIB_ERROR, SOAP_ZLIB_GZIP, SOAP_ZLIB_INFLATE, SOAP_ZLIB_NONE, soap::socket, soap::ssl, soap_mime::start, soap::start, soap::status, TEST(), soap_multipart::type, ULONG64, soap::version, soap::z_buf, soap::z_buflen, soap::z_crc, soap::z_dict, soap::z_dict_len, Z_NULL, Z_OK, soap::z_ratio_in, soap::zlib_in, soap::zlib_out, and soap::zlib_state.

Referenced by soap_begin_serve(), soap_read__QName(), soap_read_byte(), soap_read_int(), soap_read_ns1__executeCommand(), soap_read_ns1__executeCommandResponse(), soap_read_SOAP_ENV__Code(), soap_read_SOAP_ENV__Detail(), soap_read_SOAP_ENV__Fault(), soap_read_SOAP_ENV__Header(), soap_read_SOAP_ENV__Reason(), soap_read_string(), and soap_recv_empty_response().

◆ soap_begin_send()

SOAP_FMAC1 int SOAP_FMAC2 soap_begin_send ( struct soap soap)

◆ soap_begin_serve()

SOAP_FMAC1 int SOAP_FMAC2 soap_begin_serve ( struct soap soap)

Definition at line 20414 of file stdsoap2.cpp.

20415 {
20416 #ifdef WITH_FASTCGI
20417  if (FCGI_Accept() < 0)
20418  {
20419  soap->error = SOAP_EOF;
20420  return soap_send_fault(soap);
20421  }
20422 #endif
20423  soap_begin(soap);
20424  if (soap_begin_recv(soap)
20428  {
20429  if (soap->error < SOAP_STOP)
20430  {
20431 #ifdef WITH_FASTCGI
20432  (void)soap_send_fault(soap);
20433 #else
20434  return soap_send_fault(soap);
20435 #endif
20436  }
20437  return soap_closesock(soap);
20438  }
20439  return SOAP_OK;
20440 }
SOAP_FMAC1 int SOAP_FMAC2 soap_body_begin_in(struct soap *soap)
Definition: stdsoap2.cpp:21093
SOAP_FMAC1 void SOAP_FMAC2 soap_begin(struct soap *soap)
Definition: stdsoap2.cpp:12402
SOAP_FMAC1 int SOAP_FMAC2 soap_begin_recv(struct soap *soap)
Definition: stdsoap2.cpp:20447
SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_begin_in(struct soap *soap)
Definition: stdsoap2.cpp:21015
SOAP_FMAC1 int SOAP_FMAC2 soap_send_fault(struct soap *soap)
Definition: stdsoap2.cpp:22226
SOAP_FMAC1 int SOAP_FMAC2 soap_recv_header(struct soap *soap)
Definition: stdsoap2.cpp:21125

References soap::error, soap_begin(), soap_begin_recv(), soap_body_begin_in(), soap_closesock(), soap_envelope_begin_in(), SOAP_EOF, SOAP_OK, soap_recv_header(), soap_send_fault(), and SOAP_STOP.

Referenced by soap_serve().

◆ soap_begin_shaky()

SOAP_FMAC1 short SOAP_FMAC2 soap_begin_shaky ( struct soap soap)

Definition at line 10862 of file stdsoap2.cpp.

10863 {
10864  short f = soap->shaky;
10865  soap->shaky = 1;
10866  return f;
10867 }
int f(int *a)

References f(), and soap::shaky.

◆ soap_binary_search_string()

SOAP_FMAC1 int SOAP_FMAC2 soap_binary_search_string ( const char **  a,
int  n,
const char *  s 
)

Definition at line 1873 of file stdsoap2.cpp.

1874 {
1875  int min = 0, max = n-1;
1876  while (min <= max)
1877  {
1878  int mid = (min+max)/2;
1879  int r = strcmp(s, a[mid]);
1880  if (r < 0)
1881  max = mid - 1;
1882  else if (r > 0)
1883  min = mid + 1;
1884  else
1885  return mid;
1886  }
1887  return -1;
1888 }
#define min(a, b)
Definition: my_global.h:1387
#define max(a, b)
Definition: my_global.h:1386

References mpq::a, max, and min.

◆ soap_bind()

SOAP_FMAC1 SOAP_SOCKET SOAP_FMAC2 soap_bind ( struct soap soap,
const char *  host,
int  port,
int  backlog 
)

Definition at line 6719 of file stdsoap2.cpp.

6720 {
6721 #if defined(WITH_IPV6)
6722  struct addrinfo *addrinfo = NULL;
6723  struct addrinfo hints;
6724  struct addrinfo res;
6725  int err;
6726  int set = 1;
6727  int unset = 0;
6728 #elif !defined(WITH_LEAN)
6729  int set = 1;
6730 #endif
6732  {
6735  }
6737  soap->errnum = 0;
6738  soap->errmode = 1;
6739  if (tcp_init(soap))
6740  {
6741  soap_set_receiver_error(soap, tcp_error(soap), "TCP init failed in soap_bind()", SOAP_TCP_ERROR);
6742  return SOAP_INVALID_SOCKET;
6743  }
6744 #ifdef WITH_IPV6
6745  memset((void*)&hints, 0, sizeof(hints));
6746  hints.ai_family = soap->bind_inet6 ? AF_INET6 : PF_UNSPEC;
6747 #ifndef WITH_LEAN
6748  if ((soap->omode & SOAP_IO_UDP))
6749  hints.ai_socktype = SOCK_DGRAM;
6750  else
6751 #endif
6752  hints.ai_socktype = SOCK_STREAM;
6753  hints.ai_flags = AI_PASSIVE;
6754  soap->errmode = 2;
6755  err = getaddrinfo(host, soap_int2s(soap, port), &hints, &addrinfo);
6756  if (err || !addrinfo)
6757  {
6758  soap_set_receiver_error(soap, SOAP_GAI_STRERROR(err), "getaddrinfo failed in soap_bind()", SOAP_TCP_ERROR);
6759  if (addrinfo)
6760  freeaddrinfo(addrinfo);
6761  return SOAP_INVALID_SOCKET;
6762  }
6763  res = *addrinfo;
6764  if (soap_memcpy((void*)&soap->peer.storage, sizeof(soap->peer.storage), (const void*)addrinfo->ai_addr, addrinfo->ai_addrlen))
6765  {
6766  freeaddrinfo(addrinfo);
6767  soap->error = SOAP_EOM;
6768  return SOAP_INVALID_SOCKET;
6769  }
6770  soap->peerlen = addrinfo->ai_addrlen;
6771  res.ai_addr = &soap->peer.addr;
6772  res.ai_addrlen = soap->peerlen;
6773  freeaddrinfo(addrinfo);
6774  soap->master = (int)socket(res.ai_family, res.ai_socktype, res.ai_protocol);
6775 #else
6776 #ifndef WITH_LEAN
6777  if ((soap->omode & SOAP_IO_UDP))
6778  soap->master = (int)socket(AF_INET, SOCK_DGRAM, 0);
6779  else
6780 #endif
6781  soap->master = (int)socket(AF_INET, SOCK_STREAM, 0);
6782 #endif
6783  soap->errmode = 0;
6784  if (!soap_valid_socket(soap->master))
6785  {
6787  soap_set_receiver_error(soap, tcp_error(soap), "socket failed in soap_bind()", SOAP_TCP_ERROR);
6788  return SOAP_INVALID_SOCKET;
6789  }
6790  soap->port = port;
6791 #ifndef WITH_LEAN
6792  if ((soap->omode & SOAP_IO_UDP))
6793  soap->socket = soap->master;
6794 #endif
6795 #ifdef WITH_SOCKET_CLOSE_ON_EXIT
6796 #ifdef WIN32
6797 #ifndef UNDER_CE
6798  SetHandleInformation((HANDLE)soap->master, HANDLE_FLAG_INHERIT, 0);
6799 #endif
6800 #else
6801  fcntl(soap->master, F_SETFD, 1);
6802 #endif
6803 #endif
6804 #ifndef WITH_LEAN
6805  if (soap->bind_flags && setsockopt(soap->master, SOL_SOCKET, soap->bind_flags, (char*)&set, sizeof(int)))
6806  {
6808  soap_set_receiver_error(soap, tcp_error(soap), "setsockopt failed in soap_bind()", SOAP_TCP_ERROR);
6809  return SOAP_INVALID_SOCKET;
6810  }
6811 #ifndef UNDER_CE
6812  if (((soap->imode | soap->omode) & SOAP_IO_KEEPALIVE) && (!((soap->imode | soap->omode) & SOAP_IO_UDP)) && setsockopt(soap->master, SOL_SOCKET, SO_KEEPALIVE, (char*)&set, sizeof(int)))
6813  {
6815  soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_KEEPALIVE failed in soap_bind()", SOAP_TCP_ERROR);
6816  return SOAP_INVALID_SOCKET;
6817  }
6818  if (soap->sndbuf > 0 && setsockopt(soap->master, SOL_SOCKET, SO_SNDBUF, (char*)&soap->sndbuf, sizeof(int)))
6819  {
6821  soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_SNDBUF failed in soap_bind()", SOAP_TCP_ERROR);
6822  return SOAP_INVALID_SOCKET;
6823  }
6824  if (soap->rcvbuf > 0 && setsockopt(soap->master, SOL_SOCKET, SO_RCVBUF, (char*)&soap->rcvbuf, sizeof(int)))
6825  {
6827  soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_RCVBUF failed in soap_bind()", SOAP_TCP_ERROR);
6828  return SOAP_INVALID_SOCKET;
6829  }
6830 #ifdef TCP_NODELAY
6831  if (!(soap->omode & SOAP_IO_UDP) && setsockopt(soap->master, IPPROTO_TCP, TCP_NODELAY, (char*)&set, sizeof(int)))
6832  {
6834  soap_set_receiver_error(soap, tcp_error(soap), "setsockopt TCP_NODELAY failed in soap_bind()", SOAP_TCP_ERROR);
6835  return SOAP_INVALID_SOCKET;
6836  }
6837 #endif
6838 #ifdef TCP_FASTOPEN
6839  if (!(soap->omode & SOAP_IO_UDP) && setsockopt(soap->master, IPPROTO_TCP, TCP_FASTOPEN, (char*)&set, sizeof(int)))
6840  {
6841  /* silently ignore */
6842  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "setsockopt TCP_FASTOPEN failed in soap_bind()\n"));
6843  }
6844 #endif
6845 #endif
6846 #endif
6847 #ifdef WITH_IPV6
6848  if (res.ai_family == AF_INET6 && setsockopt(soap->master, IPPROTO_IPV6, IPV6_V6ONLY, soap->bind_v6only ? (char*)&set : (char*)&unset, sizeof(int)))
6849  {
6851  soap_set_receiver_error(soap, tcp_error(soap), "setsockopt IPV6_V6ONLY failed in soap_bind()", SOAP_TCP_ERROR);
6852  return SOAP_INVALID_SOCKET;
6853  }
6854  soap->errmode = 0;
6855  if (bind(soap->master, res.ai_addr, (int)res.ai_addrlen))
6856  {
6858  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not bind to host, bind failed\n"));
6860  soap_set_receiver_error(soap, tcp_error(soap), "bind failed in soap_bind()", SOAP_TCP_ERROR);
6861  return SOAP_INVALID_SOCKET;
6862  }
6863 #else
6864  soap->peerlen = sizeof(soap->peer.in);
6865  memset((void*)&soap->peer.in, 0, sizeof(soap->peer.in));
6866  soap->peer.in.sin_family = AF_INET;
6867  soap->errmode = 2;
6868  if (host)
6869  {
6870  if (soap->fresolve(soap, host, &soap->peer.in.sin_addr))
6871  {
6872  soap_set_receiver_error(soap, tcp_error(soap), "get host by name failed in soap_bind()", SOAP_TCP_ERROR);
6873  return SOAP_INVALID_SOCKET;
6874  }
6875  }
6876  else
6877  soap->peer.in.sin_addr.s_addr = htonl(INADDR_ANY);
6878  soap->peer.in.sin_port = htons((short)port);
6879  soap->errmode = 0;
6880  if (bind(soap->master, &soap->peer.addr, (int)soap->peerlen))
6881  {
6883  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not bind to host, bind failed\n"));
6885  soap_set_receiver_error(soap, tcp_error(soap), "bind failed in soap_bind()", SOAP_TCP_ERROR);
6886  return SOAP_INVALID_SOCKET;
6887  }
6888 #endif
6889  if (!(soap->omode & SOAP_IO_UDP) && listen(soap->master, backlog))
6890  {
6892  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not bind to host, listen failed\n"));
6894  soap_set_receiver_error(soap, tcp_error(soap), "listen failed in soap_bind()", SOAP_TCP_ERROR);
6895  return SOAP_INVALID_SOCKET;
6896  }
6897  return soap->master;
6898 }
static int tcp_init(struct soap *)
Definition: stdsoap2.cpp:5015
SOAP_FMAC1 const char *SOAP_FMAC2 soap_int2s(struct soap *soap, int n)
Definition: stdsoap2.cpp:16094
#define SOAP_GAI_STRERROR
Definition: stdsoap2.h:1002
short bind_inet6
Definition: stdsoap2.h:2685
int bind_flags
Definition: stdsoap2.h:2684
short bind_v6only
Definition: stdsoap2.h:2686
int(* fclosesocket)(struct soap *, SOAP_SOCKET)
Definition: stdsoap2.h:2746
struct sockaddr_storage storage
Definition: stdsoap2.h:2908
int(* fresolve)(struct soap *, const char *, struct in_addr *inaddr)
Definition: stdsoap2.h:2743
#define HANDLE
Definition: violite.h:59

References soap::addr, soap::bind_flags, soap::bind_inet6, soap::bind_v6only, DBGLOG, soap::errmode, soap::errnum, soap::error, soap::fclosesocket, soap::fresolve, HANDLE, soap::imode, soap::in, soap::master, memset, NULL, soap::omode, soap::peer, soap::peerlen, soap::port, soap::rcvbuf, set(), soap::sndbuf, soap_closesock(), SOAP_EOM, SOAP_GAI_STRERROR, soap_int2s(), SOAP_INVALID_SOCKET, SOAP_IO_KEEPALIVE, SOAP_IO_UDP, soap_memcpy, soap_set_receiver_error(), soap_socket_errno, SOAP_TCP_ERROR, soap_valid_socket, soap::socket, soap::storage, tcp_error(), tcp_init(), and TEST().

Referenced by ACSoapThread().

◆ soap_block_size()

SOAP_FMAC1 size_t SOAP_FMAC2 soap_block_size ( struct soap soap,
struct soap_blist b 
)

Definition at line 3283 of file stdsoap2.cpp.

3284 {
3285  if (!b)
3286  b = soap->blist;
3287  return b->head->size;
3288 }

References b, and soap::blist.

Referenced by soap_end_send_flush(), and soap_save_block().

◆ soap_body_begin_in()

SOAP_FMAC1 int SOAP_FMAC2 soap_body_begin_in ( struct soap soap)

Definition at line 21093 of file stdsoap2.cpp.

21094 {
21095  if (soap->version == 0)
21096  return SOAP_OK;
21097  soap->part = SOAP_IN_BODY;
21098  if (soap_element_begin_in(soap, "SOAP-ENV:Body", 0, NULL))
21099  return soap->error;
21100  if (!soap->body)
21101  soap->part = SOAP_NO_BODY;
21102  return SOAP_OK;
21103 }
SOAP_FMAC1 int SOAP_FMAC2 soap_element_begin_in(struct soap *soap, const char *tag, int nillable, const char *type)
Definition: stdsoap2.cpp:13889
#define SOAP_IN_BODY
Definition: stdsoap2.h:1783
#define SOAP_NO_BODY
Definition: stdsoap2.h:1782

References soap::body, soap::error, NULL, soap::part, soap_element_begin_in(), SOAP_IN_BODY, SOAP_NO_BODY, SOAP_OK, and soap::version.

Referenced by soap_begin_serve().

◆ soap_body_begin_out()

SOAP_FMAC1 int SOAP_FMAC2 soap_body_begin_out ( struct soap soap)

Definition at line 21059 of file stdsoap2.cpp.

21060 {
21061  if (soap->version == 1)
21062  soap->encoding = 1;
21063 #ifndef WITH_LEAN
21064  if ((soap->mode & SOAP_SEC_WSUID) && soap_set_attr(soap, "wsu:Id", "Body", 1))
21065  return soap->error;
21066 #endif
21067  if (soap->version == 0)
21068  return SOAP_OK;
21069  soap->part = SOAP_IN_BODY;
21070  return soap_element_begin_out(soap, "SOAP-ENV:Body", 0, NULL);
21071 }
#define SOAP_SEC_WSUID
Definition: stdsoap2.h:1734

References soap::encoding, soap::error, soap::mode, NULL, soap::part, soap_element_begin_out(), SOAP_IN_BODY, SOAP_OK, SOAP_SEC_WSUID, soap_set_attr(), and soap::version.

Referenced by soap_send_fault(), and soap_serve_ns1__executeCommand().

◆ soap_body_end_in()

SOAP_FMAC1 int SOAP_FMAC2 soap_body_end_in ( struct soap soap)

Definition at line 21110 of file stdsoap2.cpp.

21111 {
21112  if (soap->version == 0)
21113  return SOAP_OK;
21114  if (soap->part == SOAP_NO_BODY)
21115  return soap->error = SOAP_OK;
21116  soap->part = SOAP_END_BODY;
21117  return soap_element_end_in(soap, "SOAP-ENV:Body");
21118 }
SOAP_FMAC1 int SOAP_FMAC2 soap_element_end_in(struct soap *soap, const char *tag)
Definition: stdsoap2.cpp:13927
#define SOAP_END_BODY
Definition: stdsoap2.h:1784

References soap::error, soap::part, soap_element_end_in(), SOAP_END_BODY, SOAP_NO_BODY, SOAP_OK, and soap::version.

Referenced by soap_recv_fault(), and soap_serve_ns1__executeCommand().

◆ soap_body_end_out()

SOAP_FMAC1 int SOAP_FMAC2 soap_body_end_out ( struct soap soap)

Definition at line 21078 of file stdsoap2.cpp.

21079 {
21080  if (soap->version == 0)
21081  return SOAP_OK;
21082  if (soap_element_end_out(soap, "SOAP-ENV:Body"))
21083  return soap->error;
21084  soap->part = SOAP_END_BODY;
21085  return SOAP_OK;
21086 }

References soap::error, soap::part, soap_element_end_out(), SOAP_END_BODY, SOAP_OK, and soap::version.

Referenced by soap_send_fault(), and soap_serve_ns1__executeCommand().

◆ soap_byte2s()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_byte2s ( struct soap soap,
char  n 
)

Definition at line 16389 of file stdsoap2.cpp.

16390 {
16391  return soap_long2s(soap, (long)n);
16392 }
SOAP_FMAC1 const char *SOAP_FMAC2 soap_long2s(struct soap *soap, long n)
Definition: stdsoap2.cpp:16193

References soap_long2s().

◆ soap_check_and_mark()

SOAP_FMAC1 int SOAP_FMAC2 soap_check_and_mark ( struct soap soap,
const void *  p,
int  t,
char **  mark 
)

Definition at line 13693 of file stdsoap2.cpp.

13694 {
13695  if (mark)
13696  {
13697  struct soap_plist *pp;
13698  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Check %p and mark %p\n", p, (void*)mark));
13699  if (!soap_pointer_lookup(soap, p, t, &pp))
13700  if (!soap_pointer_enter(soap, p, NULL, 0, t, &pp))
13701  return -1;
13702  if ((soap->mode & SOAP_IO_LENGTH))
13703  {
13704  if (pp->mark1 > 0)
13705  return -1;
13706  pp->mark1 = 1;
13707  *mark = &pp->mark1;
13708  }
13709  else
13710  {
13711  if (pp->mark2 > 0)
13712  return -1;
13713  pp->mark2 = 1;
13714  *mark = &pp->mark2;
13715  }
13716  }
13717  return 0;
13718 }
SOAP_FMAC1 int SOAP_FMAC2 soap_pointer_lookup(struct soap *soap, const void *p, int type, struct soap_plist **ppp)
Definition: stdsoap2.cpp:9654

References DBGLOG, soap_plist::mark1, soap_plist::mark2, soap::mode, NULL, SOAP_IO_LENGTH, soap_pointer_enter(), soap_pointer_lookup(), and TEST().

Referenced by soap_element_id().

◆ soap_check_mime_attachments()

SOAP_FMAC1 int SOAP_FMAC2 soap_check_mime_attachments ( struct soap soap)

Definition at line 19686 of file stdsoap2.cpp.

19687 {
19688  if ((soap->mode & SOAP_MIME_POSTCHECK))
19690  return 0;
19691 }
#define SOAP_MIME_POSTCHECK
Definition: stdsoap2.h:1732

References soap::mode, NULL, SOAP_MIME_POSTCHECK, and soap_recv_mime_attachment().

◆ soap_check_result()

SOAP_FMAC1 void SOAP_FMAC2 soap_check_result ( struct soap soap,
const char *  tag 
)

Definition at line 13814 of file stdsoap2.cpp.

13815 {
13816  (void)tag;
13817  if (soap->version == 2 && soap->encodingStyle)
13818  {
13819  soap_instring(soap, ":result", NULL, NULL, 0, 2, -1, -1, NULL);
13820  /* just ignore content for compliance reasons, but should compare tag to element's QName value? */
13821  }
13822 }
SOAP_FMAC1 char **SOAP_FMAC2 soap_instring(struct soap *soap, const char *tag, char **p, const char *type, int t, int flag, long minlen, long maxlen, const char *pattern)
Definition: stdsoap2.cpp:18300

References soap::encodingStyle, NULL, soap_instring(), and soap::version.

◆ soap_cleanup()

SOAP_FMAC1 void SOAP_FMAC2 soap_cleanup ( struct soap soap)

Definition at line 7263 of file stdsoap2.cpp.

7264 {
7265  soap_done(soap);
7266 #ifdef WIN32
7267  if (!tcp_done)
7268  return;
7269  tcp_done = 0;
7270  WSACleanup();
7271 #endif
7272 }
SOAP_FMAC1 void SOAP_FMAC2 soap_done(struct soap *soap)
Definition: stdsoap2.cpp:7280

References soap_done().

◆ soap_close_logfiles()

SOAP_FMAC1 void SOAP_FMAC2 soap_close_logfiles ( struct soap )

Referenced by soap_end().

◆ soap_closesock()

SOAP_FMAC1 int SOAP_FMAC2 soap_closesock ( struct soap soap)

Definition at line 7191 of file stdsoap2.cpp.

7192 {
7193  int status = soap->error;
7194  int err = SOAP_OK;
7195  soap->part = SOAP_END;
7196 #ifndef WITH_LEANER
7197  if (status && status < 200) /* attachment state is not to be trusted */
7198  {
7199  soap->mime.first = NULL;
7200  soap->mime.last = NULL;
7201  soap->dime.first = NULL;
7202  soap->dime.last = NULL;
7203  }
7204 #endif
7205  if (soap->fdisconnect)
7206  err = soap->fdisconnect(soap);
7207  if (err || status == SOAP_EOF || status == SOAP_TCP_ERROR || status == SOAP_SSL_ERROR || !soap->keep_alive)
7208  {
7209  soap->keep_alive = 0;
7210  if (soap->fclose && (soap->error = soap->fclose(soap)) != SOAP_OK)
7211  return soap->error;
7212  if (err)
7213  return soap->error = err;
7214  }
7215 #ifdef WITH_ZLIB
7216  if (!(soap->mode & SOAP_MIME_POSTCHECK))
7217  {
7220  else if (soap->zlib_state == SOAP_ZLIB_INFLATE)
7223  }
7224 #endif
7225  return soap->error = status;
7226 }
int ZEXPORT deflateEnd(z_streamp strm)
Definition: deflate.c:977
int ZEXPORT inflateEnd(z_streamp strm)
Definition: inflate.c:1253
#define SOAP_SSL_ERROR
Definition: stdsoap2.h:1558
int(* fclose)(struct soap *)
Definition: stdsoap2.h:2750
int(* fdisconnect)(struct soap *)
Definition: stdsoap2.h:2745

References soap::d_stream, deflateEnd(), soap::dime, soap::error, soap::fclose, soap::fdisconnect, soap_dime::first, soap_mime::first, inflateEnd(), soap::keep_alive, soap_dime::last, soap_mime::last, soap::mime, soap::mode, NULL, soap::part, SOAP_END, SOAP_EOF, SOAP_MIME_POSTCHECK, SOAP_OK, SOAP_SSL_ERROR, SOAP_TCP_ERROR, SOAP_ZLIB_DEFLATE, SOAP_ZLIB_INFLATE, SOAP_ZLIB_NONE, and soap::zlib_state.

Referenced by soap_accept(), soap_begin_serve(), soap_bind(), soap_DELETE(), soap_done(), soap_end(), soap_GET__QName(), soap_GET_byte(), soap_GET_int(), soap_GET_ns1__executeCommand(), soap_GET_ns1__executeCommandResponse(), soap_GET_SOAP_ENV__Code(), soap_GET_SOAP_ENV__Detail(), soap_GET_SOAP_ENV__Fault(), soap_GET_SOAP_ENV__Header(), soap_GET_SOAP_ENV__Reason(), soap_GET_string(), soap_PATCH__QName(), soap_PATCH_byte(), soap_PATCH_int(), soap_PATCH_ns1__executeCommand(), soap_PATCH_ns1__executeCommandResponse(), soap_PATCH_SOAP_ENV__Code(), soap_PATCH_SOAP_ENV__Detail(), soap_PATCH_SOAP_ENV__Fault(), soap_PATCH_SOAP_ENV__Header(), soap_PATCH_SOAP_ENV__Reason(), soap_PATCH_string(), soap_POST_recv__QName(), soap_POST_recv_byte(), soap_POST_recv_int(), soap_POST_recv_ns1__executeCommand(), soap_POST_recv_ns1__executeCommandResponse(), soap_POST_recv_SOAP_ENV__Code(), soap_POST_recv_SOAP_ENV__Detail(), soap_POST_recv_SOAP_ENV__Fault(), soap_POST_recv_SOAP_ENV__Header(), soap_POST_recv_SOAP_ENV__Reason(), soap_POST_recv_string(), soap_POST_send__QName(), soap_POST_send_byte(), soap_POST_send_int(), soap_POST_send_ns1__executeCommand(), soap_POST_send_ns1__executeCommandResponse(), soap_POST_send_SOAP_ENV__Code(), soap_POST_send_SOAP_ENV__Detail(), soap_POST_send_SOAP_ENV__Fault(), soap_POST_send_SOAP_ENV__Header(), soap_POST_send_SOAP_ENV__Reason(), soap_POST_send_string(), soap_PUT__QName(), soap_PUT_byte(), soap_PUT_int(), soap_PUT_ns1__executeCommand(), soap_PUT_ns1__executeCommandResponse(), soap_PUT_SOAP_ENV__Code(), soap_PUT_SOAP_ENV__Detail(), soap_PUT_SOAP_ENV__Fault(), soap_PUT_SOAP_ENV__Header(), soap_PUT_SOAP_ENV__Reason(), soap_PUT_string(), soap_recv_empty_response(), soap_recv_fault(), soap_recv_mime_attachment(), soap_send_empty_response(), soap_send_fault(), soap_serve_ns1__executeCommand(), and soap_try_connect_command().

◆ soap_clr_attr()

SOAP_FMAC1 void SOAP_FMAC2 soap_clr_attr ( struct soap soap)

Definition at line 14212 of file stdsoap2.cpp.

14213 {
14214  struct soap_attribute *tp;
14215 #ifndef WITH_LEAN
14216  if ((soap->mode & SOAP_XML_CANONICAL))
14217  {
14218  while (soap->attributes)
14219  {
14220  tp = soap->attributes->next;
14221  if (soap->attributes->value)
14224  soap->attributes = tp;
14225  }
14226  }
14227  else
14228 #endif
14229  {
14230  for (tp = soap->attributes; tp; tp = tp->next)
14231  tp->visible = 0;
14232  }
14233 }

References soap::attributes, soap::mode, soap_attribute::next, SOAP_FREE, SOAP_XML_CANONICAL, soap_attribute::value, and soap_attribute::visible.

Referenced by soap_begin_count(), and soap_init_send().

◆ soap_clr_dime()

SOAP_FMAC1 void SOAP_FMAC2 soap_clr_dime ( struct soap soap)

Definition at line 20109 of file stdsoap2.cpp.

20110 {
20111  soap->omode &= ~SOAP_ENC_DIME;
20112  soap->dime.first = NULL;
20113  soap->dime.last = NULL;
20114 }

References soap::dime, soap_dime::first, soap_dime::last, NULL, soap::omode, and SOAP_ENC_DIME.

◆ soap_clr_mime()

SOAP_FMAC1 void SOAP_FMAC2 soap_clr_mime ( struct soap soap)

Definition at line 20123 of file stdsoap2.cpp.

20124 {
20125  soap->omode &= ~SOAP_ENC_MIME;
20126  soap->mime.first = NULL;
20127  soap->mime.last = NULL;
20128  soap->mime.boundary = NULL;
20129  soap->mime.start = NULL;
20130 }

References soap_mime::boundary, soap_mime::first, soap_mime::last, soap::mime, NULL, soap::omode, SOAP_ENC_MIME, and soap_mime::start.

Referenced by soap_dealloc().

◆ soap_code()

SOAP_FMAC1 const struct soap_code_map* SOAP_FMAC2 soap_code ( const struct soap_code_map code_map,
const char *  str 
)

Definition at line 1760 of file stdsoap2.cpp.

1761 {
1762  if (code_map && str)
1763  {
1764  while (code_map->string)
1765  {
1766  if (!strcmp(str, code_map->string)) /* case sensitive */
1767  return code_map;
1768  code_map++;
1769  }
1770  }
1771  return NULL;
1772 }
const char * string
Definition: stdsoap2.h:2997

References NULL, and soap_code_map::string.

◆ soap_code_bits()

SOAP_FMAC1 LONG64 SOAP_FMAC2 soap_code_bits ( const struct soap_code_map code_map,
const char *  str 
)

Definition at line 1812 of file stdsoap2.cpp.

1813 {
1814  LONG64 bits = 0;
1815  if (code_map)
1816  {
1817  while (str && *str)
1818  {
1819  const struct soap_code_map *p;
1820  for (p = code_map; p->string; p++)
1821  {
1822  size_t n = strlen(p->string);
1823  if (!strncmp(p->string, str, n) && soap_coblank((soap_wchar)str[n]))
1824  {
1825  bits |= p->code;
1826  str += n;
1827  while (*str > 0 && *str <= 32)
1828  str++;
1829  break;
1830  }
1831  }
1832  if (!p->string)
1833  return 0;
1834  }
1835  }
1836  return bits;
1837 }
uint16 bits() const
Returns the underlying bits in this representation. Equivalent to:
Definition: unorm16.h:89
#define LONG64
Definition: stdsoap2.h:1085
LONG64 code
Definition: stdsoap2.h:2996

References G3D::bits(), soap_code_map::code, LONG64, soap_coblank, and soap_code_map::string.

◆ soap_code_int()

SOAP_FMAC1 LONG64 SOAP_FMAC2 soap_code_int ( const struct soap_code_map code_map,
const char *  str,
LONG64  other 
)

Definition at line 1779 of file stdsoap2.cpp.

1780 {
1781  if (code_map)
1782  {
1783  while (code_map->string)
1784  {
1785  if (!soap_tag_cmp(str, code_map->string)) /* case insensitive */
1786  return code_map->code;
1787  code_map++;
1788  }
1789  }
1790  return other;
1791 }
SOAP_FMAC1 int SOAP_FMAC2 soap_tag_cmp(const char *s, const char *t)
Definition: stdsoap2.cpp:3723

References soap_code_map::code, soap_tag_cmp(), and soap_code_map::string.

Referenced by soap_char(), and soap_getmimehdr().

◆ soap_code_list()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_code_list ( struct soap soap,
const struct soap_code_map code_map,
long  code 
)

Definition at line 1844 of file stdsoap2.cpp.

1845 {
1846  char *t = soap->tmpbuf;
1847  if (code_map)
1848  {
1849  while (code_map->string)
1850  {
1851  if ((code_map->code & code))
1852  {
1853  const char *s = code_map->string;
1854  if (t != soap->tmpbuf)
1855  *t++ = ' ';
1856  while (*s && t < soap->tmpbuf + sizeof(soap->tmpbuf) - 1)
1857  *t++ = *s++;
1858  if (t == soap->tmpbuf + sizeof(soap->tmpbuf) - 1)
1859  break;
1860  }
1861  code_map++;
1862  }
1863  }
1864  *t = '\0';
1865  return soap->tmpbuf;
1866 }
Definition: inftrees.h:24

References soap_code_map::code, soap_code_map::string, and soap::tmpbuf.

◆ soap_code_str()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_code_str ( const struct soap_code_map code_map,
long  code 
)

Definition at line 1798 of file stdsoap2.cpp.

1799 {
1800  if (!code_map)
1801  return NULL;
1802  while (code_map->code != code && code_map->string)
1803  code_map++;
1804  return code_map->string;
1805 }

References soap_code_map::code, NULL, and soap_code_map::string.

Referenced by http_error(), soap_count_attachments(), soap_putmimehdr(), and tcp_error().

◆ soap_connect()

SOAP_FMAC1 int SOAP_FMAC2 soap_connect ( struct soap soap,
const char *  endpoint,
const char *  action 
)

Definition at line 21329 of file stdsoap2.cpp.

21330 {
21331  return soap_connect_command(soap, SOAP_POST, endpoint, action);
21332 }
SOAP_FMAC1 int SOAP_FMAC2 soap_connect_command(struct soap *soap, int http_command, const char *endpoints, const char *action)
Definition: stdsoap2.cpp:21339

References soap_connect_command(), and SOAP_POST.

◆ soap_connect_command()

SOAP_FMAC1 int SOAP_FMAC2 soap_connect_command ( struct soap soap,
int  http_command,
const char *  endpoints,
const char *  action 
)

Definition at line 21339 of file stdsoap2.cpp.

21340 {
21341  if (endpoints)
21342  {
21343  int retry = soap->connect_retry;
21344  unsigned int backoff = 1;
21345  for (;;)
21346  {
21347  struct timeval tv;
21348  const char *s;
21349  s = strchr(endpoints, ' ');
21350  if (s)
21351  {
21352  size_t l = strlen(endpoints);
21353  char *endpoint = NULL;
21354  if (SOAP_MAXALLOCSIZE == 0 || l <= SOAP_MAXALLOCSIZE)
21355  endpoint = (char*)SOAP_MALLOC(soap, l + 1);
21356  if (!endpoint)
21357  return soap->error = SOAP_EOM;
21358  for (;;)
21359  {
21360  (void)soap_strncpy(endpoint, l + 1, endpoints, s - endpoints);
21361  endpoint[s - endpoints] = '\0';
21362  if (soap_try_connect_command(soap, http_command, endpoint, action) != SOAP_TCP_ERROR)
21363  break;
21364  while (*s == ' ')
21365  s++;
21366  if (!*s)
21367  break;
21368  soap->error = SOAP_OK;
21369  endpoints = s;
21370  s = strchr(endpoints, ' ');
21371  if (!s)
21372  s = endpoints + strlen(endpoints);
21373  }
21374  SOAP_FREE(soap, endpoint);
21375  }
21376  else
21377  {
21378  soap_try_connect_command(soap, http_command, endpoints, action);
21379  }
21380  if (soap->error != SOAP_TCP_ERROR || retry <= 0)
21381  break;
21382  soap->error = SOAP_OK;
21383  tv.tv_sec = backoff;
21384  tv.tv_usec = 0;
21385  select(0, NULL, NULL, NULL, &tv);
21386  if (backoff < 32)
21387  backoff *= 2;
21388  --retry;
21389  }
21390  }
21391  return soap->error;
21392 }
static int soap_try_connect_command(struct soap *, int http_command, const char *endpoint, const char *action)
Definition: stdsoap2.cpp:21397
int connect_retry
Definition: stdsoap2.h:2683

References soap::connect_retry, soap::error, mpq::l, NULL, SOAP_EOM, SOAP_FREE, SOAP_MALLOC, SOAP_MAXALLOCSIZE, SOAP_OK, soap_strncpy, SOAP_TCP_ERROR, and soap_try_connect_command().

Referenced by soap_connect(), soap_DELETE(), soap_GET(), soap_PATCH(), soap_POST(), and soap_PUT().

◆ soap_copy()

SOAP_FMAC1 struct soap* SOAP_FMAC2 soap_copy ( const struct soap soap)

Definition at line 11703 of file stdsoap2.cpp.

11704 {
11709  soap_done(copy);
11710  if (soap_copy_context(copy, soap) != NULL)
11711  return copy;
11712  soap_free(copy);
11713  return NULL;
11714 }
OutputIterator copy(const RangeT &range, OutputIterator out)
Definition: ranges.h:50
SOAP_FMAC1 void SOAP_FMAC2 soap_set_sent_logfile(struct soap *soap, const char *logfile)
Definition: stdsoap2.cpp:11677
SOAP_FMAC1 void SOAP_FMAC2 soap_set_test_logfile(struct soap *soap, const char *logfile)
Definition: stdsoap2.cpp:11690
SOAP_FMAC1 void SOAP_FMAC2 soap_set_recv_logfile(struct soap *soap, const char *logfile)
Definition: stdsoap2.cpp:11664
SOAP_FMAC1 void SOAP_FMAC2 soap_free(struct soap *soap)
Definition: stdsoap2.cpp:9582
SOAP_FMAC1 struct soap *SOAP_FMAC2 soap_copy_context(struct soap *copy, const struct soap *soap)
Definition: stdsoap2.cpp:11721
SOAP_FMAC1 struct soap *SOAP_FMAC2 soap_versioning() soap_new(soap_mode imode, soap_mode omode)
Definition: stdsoap2.cpp:9564
#define SOAP_IO_DEFAULT
Definition: stdsoap2.h:1740
#define soap_versioning(name)
Definition: stdsoap2.h:3048

References detail::copy(), NULL, soap_copy_context(), soap_done(), soap_free(), SOAP_IO_DEFAULT, soap_new(), soap_set_recv_logfile(), soap_set_sent_logfile(), soap_set_test_logfile(), and soap_versioning.

Referenced by ACSoapThread().

◆ soap_copy_context()

SOAP_FMAC1 struct soap* SOAP_FMAC2 soap_copy_context ( struct soap copy,
const struct soap soap 
)

Definition at line 11721 of file stdsoap2.cpp.

11722 {
11723  if (copy == soap)
11724  return copy;
11725  if (soap_check_state(soap))
11726  return NULL;
11727  if (copy)
11728  {
11729  struct soap_plugin *p = NULL;
11730  (void)soap_memcpy((void*)copy, sizeof(struct soap), (const void*)soap, sizeof(struct soap));
11731  copy->state = SOAP_COPY;
11732 #ifdef SOAP_MEM_DEBUG
11733  soap_init_mht(copy);
11734 #endif
11735 #ifdef SOAP_DEBUG
11736  soap_init_logs(copy);
11740 #endif
11741  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying context\n"));
11742  copy->error = SOAP_OK;
11743  copy->bearer = NULL;
11744  copy->userid = NULL;
11745  copy->passwd = NULL;
11746 #ifdef WITH_NTLM
11747  copy->ntlm_challenge = NULL;
11748 #endif
11749  copy->nlist = NULL;
11750  copy->blist = NULL;
11751  copy->clist = NULL;
11752  copy->alist = NULL;
11753  copy->attributes = NULL;
11754  copy->labbuf = NULL;
11755  copy->lablen = 0;
11756  copy->labidx = 0;
11757  copy->namespaces = soap->local_namespaces;
11758  copy->local_namespaces = NULL;
11759  soap_set_local_namespaces(copy); /* copy content of soap->local_namespaces */
11760  copy->namespaces = soap->namespaces; /* point to shared read-only namespaces table */
11761  copy->c_locale = NULL;
11762 #ifdef WITH_OPENSSL
11763  copy->bio = NULL;
11764  copy->ssl = NULL;
11765  copy->session = NULL;
11766  copy->session_host[0] = '\0';
11767  copy->session_port = 443;
11768 #endif
11769 #ifdef WITH_GNUTLS
11770  copy->session = NULL;
11771 #endif
11772 #ifdef WITH_ZLIB
11773  copy->d_stream = NULL;
11774  copy->z_buf = NULL;
11775 #endif
11776 #ifndef WITH_NOIDREF
11778 #endif
11780  copy->header = NULL;
11781  copy->fault = NULL;
11782  copy->action = NULL;
11783 #ifndef WITH_LEAN
11784 #ifdef WITH_COOKIES
11785  copy->cookies = soap_copy_cookies(copy, soap);
11786 #else
11787  copy->cookies = NULL;
11788 #endif
11789 #endif
11790  copy->plugins = NULL;
11791  for (p = soap->plugins; p; p = p->next)
11792  {
11793  struct soap_plugin *q = (struct soap_plugin*)SOAP_MALLOC(copy, sizeof(struct soap_plugin));
11794  if (!q)
11795  {
11796  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not allocate plugin '%s'\n", p->id));
11797  soap_end(copy);
11798  soap_done(copy);
11799  return NULL;
11800  }
11801  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying plugin '%s'\n", p->id));
11802  *q = *p;
11803  if (p->fcopy && (copy->error = p->fcopy(copy, q, p)) != SOAP_OK)
11804  {
11805  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not copy plugin '%s' error = %d\n", p->id, copy->error));
11806  SOAP_FREE(copy, q);
11807  soap_end(copy);
11808  soap_done(copy);
11809  return NULL;
11810  }
11811  q->next = copy->plugins;
11812  copy->plugins = q;
11813  }
11814  }
11815 #ifdef WITH_SELF_PIPE
11816  pipe(copy->pipe_fd);
11817  SOAP_SOCKNONBLOCK(copy->pipe_fd[0])
11818  SOAP_SOCKNONBLOCK(copy->pipe_fd[1])
11819 #endif
11820  return copy;
11821 }
static void soap_init_pht(struct soap *)
Definition: stdsoap2.cpp:9550
static void soap_init_iht(struct soap *)
Definition: stdsoap2.cpp:10312
SOAP_FMAC1 void SOAP_FMAC2 soap_end(struct soap *soap)
Definition: stdsoap2.cpp:12427
#define SOAP_INDEX_SENT
Definition: stdsoap2.h:1245
#define SOAP_INDEX_RECV
Definition: stdsoap2.h:1244
#define SOAP_INDEX_TEST
Definition: stdsoap2.h:1246
#define SOAP_COPY
Definition: stdsoap2.h:1770
#define soap_check_state(soap)
Definition: stdsoap2.h:1772
const char * id
Definition: stdsoap2.h:3030
struct soap_plugin * next
Definition: stdsoap2.h:3029
int(* fcopy)(struct soap *soap, struct soap_plugin *dst, struct soap_plugin *src)
Definition: stdsoap2.h:3032
const char * logfile[SOAP_MAXLOGS]
Definition: stdsoap2.h:2885
FILE * fdebug[SOAP_MAXLOGS]
Definition: stdsoap2.h:2886
const struct Namespace * namespaces
Definition: stdsoap2.h:2703
struct Namespace * local_namespaces
Definition: stdsoap2.h:2704
struct soap_plugin * plugins
Definition: stdsoap2.h:2721
#define const
Definition: zconf.h:214

References const, detail::copy(), DBGLOG, soap_plugin::fcopy, soap::fdebug, soap_plugin::id, soap::local_namespaces, soap::logfile, soap::namespaces, soap_plugin::next, NULL, soap::plugins, soap_check_state, SOAP_COPY, soap_done(), soap_end(), SOAP_FREE, SOAP_INDEX_RECV, SOAP_INDEX_SENT, SOAP_INDEX_TEST, soap_init_iht(), soap_init_pht(), SOAP_MALLOC, soap_memcpy, SOAP_OK, soap_set_local_namespaces(), soap_set_recv_logfile(), soap_set_sent_logfile(), soap_set_test_logfile(), SOAP_SOCKNONBLOCK, and TEST().

Referenced by soap_copy().

◆ soap_copy_stream()

SOAP_FMAC1 void SOAP_FMAC2 soap_copy_stream ( struct soap copy,
struct soap soap 
)

Definition at line 11828 of file stdsoap2.cpp.

11829 {
11830  struct soap_attribute *tp = NULL, *tq;
11831  if (copy == soap)
11832  return;
11833  copy->header = soap->header;
11834  copy->mode = soap->mode;
11835  copy->imode = soap->imode;
11836  copy->omode = soap->omode;
11837  copy->socket = soap->socket;
11838  copy->sendsk = soap->sendsk;
11839  copy->recvsk = soap->recvsk;
11840  copy->transfer_timeout = soap->transfer_timeout;
11841  copy->recv_maxlength = soap->recv_maxlength;
11842  copy->recv_timeout = soap->recv_timeout;
11843  copy->send_timeout = soap->send_timeout;
11844  copy->connect_timeout = soap->connect_timeout;
11845  copy->accept_timeout = soap->accept_timeout;
11846  copy->socket_flags = soap->socket_flags;
11847  copy->connect_flags = soap->connect_flags;
11848  copy->connect_retry = soap->connect_retry;
11849  copy->bind_flags = soap->bind_flags;
11850  copy->bind_inet6 = soap->bind_inet6;
11851  copy->bind_v6only = soap->bind_v6only;
11852  copy->accept_flags = soap->accept_flags;
11853  copy->sndbuf = soap->sndbuf;
11854  copy->rcvbuf = soap->rcvbuf;
11855  copy->linger_time = soap->linger_time;
11856  copy->maxlevel = soap->maxlevel;
11857  copy->maxlength = soap->maxlength;
11858  copy->maxoccurs = soap->maxoccurs;
11859  copy->os = soap->os;
11860  copy->is = soap->is;
11861  copy->sendfd = soap->sendfd;
11862  copy->recvfd = soap->recvfd;
11863  copy->bufidx = soap->bufidx;
11864  copy->buflen = soap->buflen;
11865  copy->ahead = soap->ahead;
11866  copy->cdata = soap->cdata;
11867  copy->chunksize = soap->chunksize;
11868  copy->chunkbuflen = soap->chunkbuflen;
11869  copy->keep_alive = soap->keep_alive;
11870  copy->tcp_keep_alive = soap->tcp_keep_alive;
11871  copy->tcp_keep_idle = soap->tcp_keep_idle;
11872  copy->tcp_keep_intvl = soap->tcp_keep_intvl;
11873  copy->tcp_keep_cnt = soap->tcp_keep_cnt;
11874  copy->max_keep_alive = soap->max_keep_alive;
11875 #ifndef WITH_NOIO
11876  copy->peer = soap->peer;
11877  copy->peerlen = soap->peerlen;
11878  copy->ip = soap->ip;
11879  copy->ip6[0] = soap->ip6[0];
11880  copy->ip6[1] = soap->ip6[1];
11881  copy->ip6[2] = soap->ip6[2];
11882  copy->ip6[3] = soap->ip6[3];
11883  copy->port = soap->port;
11884  (void)soap_memcpy((void*)copy->host, sizeof(copy->host), (const void*)soap->host, sizeof(soap->host));
11885  (void)soap_memcpy((void*)copy->endpoint, sizeof(copy->endpoint), (const void*)soap->endpoint, sizeof(soap->endpoint));
11886 #endif
11887 #ifdef WITH_OPENSSL
11888  copy->bio = soap->bio;
11889  copy->ctx = soap->ctx;
11890  copy->ssl = soap->ssl;
11891 #endif
11892 #ifdef WITH_GNUTLS
11893  copy->session = soap->session;
11894 #endif
11895 #ifdef WITH_SYSTEMSSL
11896  copy->ctx = soap->ctx;
11897  copy->ssl = soap->ssl;
11898 #endif
11899 #ifdef WITH_ZLIB
11900  copy->zlib_state = soap->zlib_state;
11901  copy->zlib_in = soap->zlib_in;
11902  copy->zlib_out = soap->zlib_out;
11904  {
11905  if (!copy->d_stream)
11906  copy->d_stream = (z_stream*)SOAP_MALLOC(copy, sizeof(z_stream));
11907  if (copy->d_stream)
11908  (void)soap_memcpy((void*)copy->d_stream, sizeof(z_stream), (const void*)soap->d_stream, sizeof(z_stream));
11909  }
11910  copy->z_crc = soap->z_crc;
11911  copy->z_ratio_in = soap->z_ratio_in;
11912  copy->z_ratio_out = soap->z_ratio_out;
11913  copy->z_level = soap->z_level;
11914  if (soap->z_buf && soap->zlib_state != SOAP_ZLIB_NONE)
11915  {
11916  if (!copy->z_buf)
11917  copy->z_buf = (char*)SOAP_MALLOC(copy, sizeof(soap->buf));
11918  if (copy->z_buf)
11919  (void)soap_memcpy((void*)copy->z_buf, sizeof(soap->buf), (const void*)soap->z_buf, sizeof(soap->buf));
11920  else
11921  copy->z_buflen = 0;
11922  }
11923  else
11924  {
11925  copy->z_buf = NULL;
11926  copy->z_buflen = 0;
11927  }
11928  copy->z_dict = soap->z_dict;
11929  copy->z_dict_len = soap->z_dict_len;
11930 #endif
11931  (void)soap_memcpy((void*)copy->buf, sizeof(copy->buf), (const void*)soap->buf, sizeof(soap->buf));
11932  /* copy XML parser state */
11933  soap_free_ns(copy);
11935  copy->version = soap->version;
11936  if (soap->nlist && soap->local_namespaces)
11937  {
11938  struct soap_nlist *np = NULL, *nq;
11939  /* copy reversed nlist */
11940  for (nq = soap->nlist; nq; nq = nq->next)
11941  {
11942  struct soap_nlist *nr = np;
11943  size_t n = sizeof(struct soap_nlist) + strlen(nq->id);
11944  np = (struct soap_nlist*)SOAP_MALLOC(copy, n);
11945  if (!np)
11946  {
11947  np = nr;
11948  break;
11949  }
11950  (void)soap_memcpy((void*)np, n, (const void*)nq, n);
11951  np->next = nr;
11952  }
11953  while (np)
11954  {
11955  const char *s = np->ns;
11956  copy->level = np->level; /* preserve element nesting level */
11957  if (!s && np->index >= 0)
11958  {
11959  s = soap->local_namespaces[np->index].out;
11960  if (!s)
11961  s = soap->local_namespaces[np->index].ns;
11962  }
11963  if (s)
11964  (void)soap_push_namespace(copy, np->id, s);
11965  nq = np;
11966  np = np->next;
11967  SOAP_FREE(copy, nq);
11968  }
11969  }
11970  (void)soap_memcpy((void*)copy->tag, sizeof(copy->tag), (const void*)soap->tag, sizeof(soap->tag));
11971  (void)soap_memcpy((void*)copy->id, sizeof(copy->id), (const void*)soap->id, sizeof(soap->id));
11972  (void)soap_memcpy((void*)copy->href, sizeof(copy->href), (const void*)soap->href, sizeof(soap->href));
11973  (void)soap_memcpy((void*)copy->type, sizeof(copy->type), (const void*)soap->type, sizeof(soap->type));
11974  copy->other = soap->other;
11975  copy->root = soap->root;
11976  copy->null = soap->null;
11977  copy->body = soap->body;
11978  copy->part = soap->part;
11979  copy->mustUnderstand = soap->mustUnderstand;
11980  copy->level = soap->level;
11981  copy->peeked = soap->peeked;
11982  /* copy attributes */
11983  for (tq = soap->attributes; tq; tq = tq->next)
11984  {
11985  struct soap_attribute *tr = tp;
11986  size_t n = sizeof(struct soap_attribute) + strlen(tq->name);
11987  tp = (struct soap_attribute*)SOAP_MALLOC(copy, n);
11988  (void)soap_memcpy((void*)tp, n, (const void*)tq, n);
11989  if (tp->size)
11990  {
11991  tp->value = (char*)SOAP_MALLOC(copy, tp->size);
11992  if (tp->value)
11993  (void)soap_memcpy((void*)tp->value, tp->size, (const void*)tq->value, tp->size);
11994  }
11995  tp->ns = NULL;
11996  tp->next = tr;
11997  }
11998  copy->attributes = tp;
11999 }
SOAP_FMAC1 struct soap_nlist *SOAP_FMAC2 soap_push_namespace(struct soap *soap, const char *id, const char *ns)
Definition: stdsoap2.cpp:3535
char * out
Definition: stdsoap2.h:2005
const char * ns
Definition: stdsoap2.h:2003
char id[1]
Definition: stdsoap2.h:2015
struct soap_nlist * next
Definition: stdsoap2.h:2011
const char * ns
Definition: stdsoap2.h:2014
size_t maxoccurs
Definition: stdsoap2.h:2696
int max_keep_alive
Definition: stdsoap2.h:2860
int sendfd
Definition: stdsoap2.h:2799
void * bio
Definition: stdsoap2.h:2942
int connect_flags
Definition: stdsoap2.h:2682
void * ctx
Definition: stdsoap2.h:2944
short other
Definition: stdsoap2.h:2832
SOAP_SOCKET recvsk
Definition: stdsoap2.h:2790
unsigned int maxlevel
Definition: stdsoap2.h:2694
unsigned int tcp_keep_cnt
Definition: stdsoap2.h:2859
unsigned int tcp_keep_intvl
Definition: stdsoap2.h:2858
short root
Definition: stdsoap2.h:2833
unsigned int tcp_keep_idle
Definition: stdsoap2.h:2857
void * session
Definition: stdsoap2.h:2945
unsigned short z_level
Definition: stdsoap2.h:2977
char id[SOAP_TAGLEN]
Definition: stdsoap2.h:2823
long maxlength
Definition: stdsoap2.h:2695
int socket_flags
Definition: stdsoap2.h:2681
float z_ratio_out
Definition: stdsoap2.h:2979
const char ** os
Definition: stdsoap2.h:2795
struct soap_nlist * nlist
Definition: stdsoap2.h:2705
char type[SOAP_TAGLEN]
Definition: stdsoap2.h:2825
char tag[SOAP_TAGLEN]
Definition: stdsoap2.h:2822
SOAP_SOCKET sendsk
Definition: stdsoap2.h:2789
int connect_timeout
Definition: stdsoap2.h:2679
int tcp_keep_alive
Definition: stdsoap2.h:2856
int transfer_timeout
Definition: stdsoap2.h:2678
struct z_stream_s z_stream

References soap::accept_flags, soap::accept_timeout, soap::ahead, soap::attributes, soap::bind_flags, soap::bind_inet6, soap::bind_v6only, soap::bio, soap::body, soap::buf, soap::bufidx, soap::buflen, soap::cdata, soap::chunkbuflen, soap::chunksize, soap::connect_flags, soap::connect_retry, soap::connect_timeout, detail::copy(), soap::ctx, soap::d_stream, soap::endpoint, soap::header, soap::host, soap::href, soap_nlist::id, soap::id, soap::imode, soap_nlist::index, soap::ip, soap::ip6, soap::is, soap::keep_alive, soap_nlist::level, soap::level, soap::linger_time, soap::local_namespaces, soap::max_keep_alive, soap::maxlength, soap::maxlevel, soap::maxoccurs, soap::mode, soap::mustUnderstand, soap_attribute::name, soap_nlist::next, soap_attribute::next, soap::nlist, Namespace::ns, soap_nlist::ns, soap::null, NULL, soap::omode, soap::os, soap::other, Namespace::out, soap::part, soap::peeked, soap::peer, soap::peerlen, soap::port, soap::rcvbuf, soap::recv_maxlength, soap::recv_timeout, soap::recvfd, soap::recvsk, soap::root, soap::send_timeout, soap::sendfd, soap::sendsk, soap::session, soap::sndbuf, SOAP_FREE, soap_free_ns(), SOAP_MALLOC, soap_memcpy, soap_push_namespace(), soap_set_local_namespaces(), SOAP_ZLIB_NONE, soap::socket, soap::socket_flags, soap::ssl, soap::tag, soap::tcp_keep_alive, soap::tcp_keep_cnt, soap::tcp_keep_idle, soap::tcp_keep_intvl, soap::transfer_timeout, soap::type, soap_attribute::value, soap::version, soap::z_buf, soap::z_crc, soap::z_dict, soap::z_dict_len, soap::z_level, soap::z_ratio_in, soap::z_ratio_out, soap::zlib_in, soap::zlib_out, and soap::zlib_state.

◆ soap_current_namespace_att()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_current_namespace_att ( struct soap soap,
const char *  tag 
)

Definition at line 3694 of file stdsoap2.cpp.

3695 {
3696  struct soap_nlist *np;
3697  const char *s;
3698  if (!tag || !strncmp(tag, "xml", 3))
3699  return NULL;
3700  s = strchr(tag, ':');
3701  if (!s)
3702  return NULL;
3703  np = soap->nlist;
3704  while (np && (strncmp(np->id, tag, s - tag) || np->id[s - tag]))
3705  np = np->next;
3706  if (!np)
3708  if (np)
3709  {
3710  if (np->index >= 0)
3711  return soap->namespaces[np->index].ns;
3712  if (np->ns && *np->ns)
3713  return soap_strdup(soap, np->ns);
3714  }
3715  return NULL;
3716 }
short index
Definition: stdsoap2.h:2013

References soap::error, soap_nlist::id, soap_nlist::index, soap::namespaces, soap_nlist::next, soap::nlist, Namespace::ns, soap_nlist::ns, NULL, SOAP_NAMESPACE, and soap_strdup().

Referenced by soap_peek_element().

◆ soap_current_namespace_tag()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_current_namespace_tag ( struct soap soap,
const char *  tag 
)

Definition at line 3650 of file stdsoap2.cpp.

3651 {
3652  struct soap_nlist *np;
3653  const char *s;
3654  if (!tag || !strncmp(tag, "xml", 3))
3655  return NULL;
3656  np = soap->nlist;
3657  s = strchr(tag, ':');
3658  if (!s)
3659  {
3660  while (np && *np->id) /* find default namespace, if present */
3661  np = np->next;
3662  }
3663  else
3664  {
3665  while (np && (strncmp(np->id, tag, s - tag) || np->id[s - tag]))
3666  np = np->next;
3667  if (!np)
3669  }
3670  if (np)
3671  {
3672  if (np->index >= 0)
3673  return soap->namespaces[np->index].ns;
3674  if (np->ns)
3675  {
3676  s = np->ns;
3677  if (*s)
3678  return soap_strdup(soap, s);
3679  do
3680  np = np->next;
3681  while (np && *np->id); /* find if there is any other default namespace */
3682  if (np)
3683  return soap_strdup(soap, s);
3684  }
3685  }
3686  return NULL;
3687 }

References soap::error, soap_nlist::id, soap_nlist::index, soap::namespaces, soap_nlist::next, soap::nlist, Namespace::ns, soap_nlist::ns, NULL, SOAP_NAMESPACE, and soap_strdup().

Referenced by soap_peek_element().

◆ soap_dateTime2s()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_dateTime2s ( struct soap soap,
time_t  n 
)

Definition at line 18561 of file stdsoap2.cpp.

18562 {
18563  struct tm T, *pT = &T;
18564  size_t l = 0;
18565 #if defined(HAVE_GMTIME_R) && !defined(WITH_NOZONE)
18566  if (gmtime_r(&n, pT) != SOAP_FUNC_R_ERR)
18567  l = strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%SZ", pT);
18568 #elif defined(HAVE_GMTIME) && !defined(WITH_NOZONE)
18569  pT = gmtime(&n);
18570  if (pT)
18571  l = strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%SZ", pT);
18572 #elif (defined(HAVE_TM_GMTOFF) || defined(HAVE_STRUCT_TM_TM_GMTOFF) || defined(HAVE_STRUCT_TM___TM_GMTOFF)) && !defined(WITH_NOZONE)
18573 #if defined(HAVE_LOCALTIME_R)
18574  if (localtime_r(&n, pT) != SOAP_FUNC_R_ERR)
18575  {
18576  l = strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S%z", pT);
18577  if (l)
18578  {
18579  (void)soap_memmove(soap->tmpbuf + 23, sizeof(soap->tmpbuf) - 23, soap->tmpbuf + 22, 3); /* 2000-03-01T02:00:00+0300 */
18580  soap->tmpbuf[22] = ':'; /* 2000-03-01T02:00:00+03:00 */
18581  }
18582  }
18583 #else
18584  pT = localtime(&n);
18585  if (pT)
18586  {
18587  l = strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S%z", pT);
18588  if (l)
18589  {
18590  (void)soap_memmove(soap->tmpbuf + 23, sizeof(soap->tmpbuf) - 23, soap->tmpbuf + 22, 3); /* 2000-03-01T02:00:00+0300 */
18591  soap->tmpbuf[22] = ':'; /* 2000-03-01T02:00:00+03:00 */
18592  }
18593  }
18594 #endif
18595 #elif defined(HAVE_GETTIMEOFDAY) && !defined(WITH_NOZONE)
18596 #if defined(HAVE_LOCALTIME_R)
18597  if (localtime_r(&n, pT) != SOAP_FUNC_R_ERR)
18598  {
18599  struct timeval tv;
18600  struct timezone tz;
18601  memset((void*)&tz, 0, sizeof(tz));
18602  gettimeofday(&tv, &tz);
18603  l = strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
18604  if (l)
18605  (SOAP_SNPRINTF(soap->tmpbuf + l, sizeof(soap->tmpbuf) - l, 7), "%+03d:%02d", -tz.tz_minuteswest/60+(pT->tm_isdst!=0), abs(tz.tz_minuteswest)%60);
18606  }
18607 #else
18608  pT = localtime(&n);
18609  if (pT)
18610  {
18611  struct timeval tv;
18612  struct timezone tz;
18613  memset((void*)&tz, 0, sizeof(tz));
18614  gettimeofday(&tv, &tz);
18615  l = strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
18616  if (l)
18617  (SOAP_SNPRINTF(soap->tmpbuf + l, sizeof(soap->tmpbuf) - l, 7), "%+03d:%02d", -tz.tz_minuteswest/60+(pT->tm_isdst!=0), abs(tz.tz_minuteswest)%60);
18618  }
18619 #endif
18620 #elif defined(HAVE_FTIME) && !defined(WITH_NOZONE)
18621 #if defined(HAVE_LOCALTIME_R)
18622  if (localtime_r(&n, pT) != SOAP_FUNC_R_ERR)
18623  {
18624  struct timeb t;
18625  memset((void*)&t, 0, sizeof(t));
18626 #ifdef __BORLANDC__
18627  ::ftime(&t);
18628 #else
18629  ftime(&t);
18630 #endif
18631  l = strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
18632  if (l)
18633  (SOAP_SNPRINTF(soap->tmpbuf + l, sizeof(soap->tmpbuf) - l, 7), "%+03d:%02d", -t.timezone/60+(pT->tm_isdst!=0), abs(t.timezone)%60);
18634  }
18635 #else
18636  pT = localtime(&n);
18637  if (pT)
18638  {
18639  struct timeb t;
18640  memset((void*)&t, 0, sizeof(t));
18641 #ifdef __BORLANDC__
18642  ::ftime(&t);
18643 #else
18644  ftime(&t);
18645 #endif
18646  l = strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
18647  if (l)
18648  (SOAP_SNPRINTF(soap->tmpbuf + l, sizeof(soap->tmpbuf) - l, 7), "%+03d:%02d", -t.timezone/60+(pT->tm_isdst!=0), abs(t.timezone)%60);
18649  }
18650 #endif
18651 #elif defined(HAVE_LOCALTIME_R)
18652  if (localtime_r(&n, pT) != SOAP_FUNC_R_ERR)
18653  l = strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
18654 #else
18655  pT = localtime(&n);
18656  if (pT)
18657  l = strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
18658 #endif
18659  if (!l)
18660  soap_strcpy(soap->tmpbuf, sizeof(soap->tmpbuf), "1969-12-31T23:59:59Z");
18661  return soap->tmpbuf;
18662 }
G3D::Matrix abs(const G3D::Matrix &M)
Definition: Matrix.h:632
FMT_MODULE_EXPORT_BEGIN std::tm localtime(std::time_t time)
Definition: chrono.h:368
std::tm gmtime(std::time_t time)
Definition: chrono.h:414
FMT_BEGIN_DETAIL_NAMESPACE size_t strftime(char *str, size_t count, const char *format, const std::tm *time)
Definition: chrono.h:456
struct tm * localtime_r(const time_t *clock, struct tm *res)
Definition: my_pthread.c:75
null gmtime_r(...)
Definition: chrono.h:288
#define soap_memmove(buf, len, src, num)
Definition: stdsoap2.h:1520
#define SOAP_FUNC_R_ERR
Definition: stdsoap2.h:982

References abs(), gmtime(), detail::gmtime_r(), mpq::l, localtime(), localtime_r(), memset, SOAP_FUNC_R_ERR, soap_memmove, SOAP_SNPRINTF, soap_strcpy, strftime(), and soap::tmpbuf.

Referenced by soap_outdateTime().

◆ soap_dealloc()

SOAP_FMAC1 void SOAP_FMAC2 soap_dealloc ( struct soap soap,
void *  p 
)

Definition at line 10560 of file stdsoap2.cpp.

10561 {
10562  if (soap_check_state(soap))
10563  return;
10564  if (p)
10565  {
10566  char **q;
10567  for (q = (char**)(void*)&soap->alist; *q; q = *(char***)q)
10568  {
10569  if (*(unsigned short*)(char*)(*q - sizeof(unsigned short)) != (unsigned short)SOAP_CANARY)
10570  {
10571 #ifdef SOAP_MEM_DEBUG
10572  fprintf(stderr, "Data corruption in dynamic allocation (see logs)\n");
10573 #endif
10574  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Data corruption:\n"));
10575  DBGHEX(TEST, *q - 200, 200);
10576  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "\n"));
10577  soap->error = SOAP_MOE;
10578  return;
10579  }
10580  if (p == (void*)(*q - *(size_t*)(*q + sizeof(void*))))
10581  {
10582  *q = **(char***)q;
10583  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Freed data at %p\n", p));
10584  SOAP_FREE(soap, p);
10585  return;
10586  }
10587  }
10588  soap_delete(soap, p);
10589  }
10590  else
10591  {
10592  char *q;
10593  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free all soap_malloc() data\n"));
10594  while (soap->alist)
10595  {
10596  q = (char*)soap->alist;
10597  if (*(unsigned short*)(char*)(q - sizeof(unsigned short)) != (unsigned short)SOAP_CANARY)
10598  {
10599 #ifdef SOAP_MEM_DEBUG
10600  fprintf(stderr, "Data corruption in dynamic allocation (see logs)\n");
10601 #endif
10602  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Data corruption:\n"));
10603  DBGHEX(TEST, q - 200, 200);
10604  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "\n"));
10605  soap->error = SOAP_MOE;
10606  return;
10607  }
10608  soap->alist = *(void**)q;
10609  q -= *(size_t*)(q + sizeof(void*));
10610  SOAP_FREE(soap, q);
10611  }
10612  /* assume these were deallocated: */
10613  soap->http_content = NULL;
10614  soap->action = NULL;
10615  soap->fault = NULL;
10616  soap->header = NULL;
10617  soap->bearer = NULL;
10618  soap->userid = NULL;
10619  soap->passwd = NULL;
10620  soap->authrealm = NULL;
10621 #ifdef WITH_NTLM
10623 #endif
10624 #ifndef WITH_LEANER
10626 #endif
10627  }
10628 }
auto fprintf(std::FILE *f, const S &fmt, const T &... args) -> int
Definition: printf.h:602
SOAP_FMAC1 void SOAP_FMAC2 soap_delete(struct soap *soap, void *p)
Definition: stdsoap2.cpp:10635
#define SOAP_CANARY
Definition: stdsoap2.cpp:343
SOAP_FMAC1 void SOAP_FMAC2 soap_clr_mime(struct soap *soap)
Definition: stdsoap2.cpp:20123
#define SOAP_MOE
Definition: stdsoap2.h:1549
#define DBGHEX(DBGFILE, MSG, LEN)
Definition: stdsoap2.h:1990
const char * passwd
Definition: stdsoap2.h:2724
const char * userid
Definition: stdsoap2.h:2723
const char * bearer
Definition: stdsoap2.h:2722
const char * authrealm
Definition: stdsoap2.h:2725
void * alist
Definition: stdsoap2.h:2708
const char * http_content
Definition: stdsoap2.h:2698
const char * ntlm_challenge
Definition: stdsoap2.h:2727

References soap::action, soap::alist, soap::authrealm, soap::bearer, DBGHEX, DBGLOG, soap::error, soap::fault, fprintf(), soap::header, soap::http_content, if(), soap::ntlm_challenge, NULL, soap::passwd, SOAP_CANARY, soap_check_state, soap_clr_mime(), soap_delete(), SOAP_FREE, SOAP_MOE, TEST(), and soap::userid.

Referenced by soap_end().

◆ soap_decode_key()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_decode_key ( char *  buf,
size_t  len,
const char *  val 
)

Definition at line 7883 of file stdsoap2.cpp.

7884 {
7885  return soap_decode(buf, len, val, "=,;");
7886 }
static const char * soap_decode(char *, size_t, const char *, const char *)
Definition: stdsoap2.cpp:7910

References soap_decode().

Referenced by soap_http_header_attribute().

◆ soap_decode_val()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_decode_val ( char *  buf,
size_t  len,
const char *  val 
)

Definition at line 7895 of file stdsoap2.cpp.

7896 {
7897  if (*val != '=')
7898  {
7899  *buf = '\0';
7900  return val;
7901  }
7902  return soap_decode(buf, len, val + 1, ",;");
7903 }

References soap_decode().

Referenced by soap_http_header_attribute().

◆ soap_del()

SOAP_FMAC1 void SOAP_FMAC2 soap_del ( struct soap soap)

Definition at line 9597 of file stdsoap2.cpp.

9598 {
9599  free(soap);
9600 }

◆ soap_del_xsd__anyAttribute()

SOAP_FMAC1 void SOAP_FMAC2 soap_del_xsd__anyAttribute ( const struct soap_dom_attribute a)

◆ soap_del_xsd__anyType()

SOAP_FMAC1 void SOAP_FMAC2 soap_del_xsd__anyType ( const struct soap_dom_element a)

◆ soap_delegate_deletion()

SOAP_FMAC1 void SOAP_FMAC2 soap_delegate_deletion ( struct soap soap,
struct soap soap_to 
)

Definition at line 10689 of file stdsoap2.cpp.

10690 {
10691  struct soap_clist *cp;
10692  char **q;
10693 #ifdef SOAP_MEM_DEBUG
10694  void *p;
10695  struct soap_mlist **mp, *mq;
10696  size_t h;
10697 #endif
10698  for (q = (char**)(void*)&soap->alist; *q; q = *(char***)q)
10699  {
10700  if (*(unsigned short*)(char*)(*q - sizeof(unsigned short)) != (unsigned short)SOAP_CANARY)
10701  {
10702 #ifdef SOAP_MEM_DEBUG
10703  fprintf(stderr, "Data corruption in dynamic allocation (see logs)\n");
10704 #endif
10705  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Data corruption:\n"));
10706  DBGHEX(TEST, *q - 200, 200);
10707  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "\n"));
10708  soap->error = SOAP_MOE;
10709  return;
10710  }
10711 #ifdef SOAP_MEM_DEBUG
10712  p = (void*)(*q - *(size_t*)(*q + sizeof(void*)));
10713  h = soap_hash_ptr(p);
10714  for (mp = &soap->mht[h]; *mp; mp = &(*mp)->next)
10715  {
10716  if ((*mp)->ptr == p)
10717  {
10718  mq = *mp;
10719  *mp = mq->next;
10720  mq->next = soap_to->mht[h];
10721  soap_to->mht[h] = mq;
10722  break;
10723  }
10724  }
10725 #endif
10726  }
10727  *q = (char*)soap_to->alist;
10728  soap_to->alist = soap->alist;
10729  soap->alist = NULL;
10730 #ifdef SOAP_MEM_DEBUG
10731  cp = soap->clist;
10732  while (cp)
10733  {
10734  h = soap_hash_ptr(cp);
10735  for (mp = &soap->mht[h]; *mp; mp = &(*mp)->next)
10736  {
10737  if ((*mp)->ptr == cp)
10738  {
10739  mq = *mp;
10740  *mp = mq->next;
10741  mq->next = soap_to->mht[h];
10742  soap_to->mht[h] = mq;
10743  break;
10744  }
10745  }
10746  cp = cp->next;
10747  }
10748 #endif
10749  cp = soap_to->clist;
10750  if (cp)
10751  {
10752  while (cp->next)
10753  cp = cp->next;
10754  cp->next = soap->clist;
10755  }
10756  else
10757  {
10758  soap_to->clist = soap->clist;
10759  }
10760  soap->clist = NULL;
10761 }
struct soap_clist * next
Definition: stdsoap2.h:2070
struct soap_mlist * mht[SOAP_PTRHASH]
Definition: stdsoap2.h:2887
struct soap_clist * clist
Definition: stdsoap2.h:2707

References soap::alist, soap::clist, DBGHEX, DBGLOG, soap::error, fprintf(), soap::mht, soap_clist::next, NULL, SOAP_CANARY, soap_hash_ptr, SOAP_MOE, and TEST().

◆ soap_DELETE()

SOAP_FMAC1 int SOAP_FMAC2 soap_DELETE ( struct soap soap,
const char *  endpoint 
)

Definition at line 21315 of file stdsoap2.cpp.

21316 {
21317  if (soap_connect_command(soap, SOAP_DEL, endpoint, NULL)
21319  return soap_closesock(soap);
21320  return SOAP_OK;
21321 }
SOAP_FMAC1 int SOAP_FMAC2 soap_recv_empty_response(struct soap *soap)
Definition: stdsoap2.cpp:22446

References NULL, soap_closesock(), soap_connect_command(), SOAP_DEL, SOAP_OK, and soap_recv_empty_response().

◆ soap_delete()

SOAP_FMAC1 void SOAP_FMAC2 soap_delete ( struct soap soap,
void *  p 
)

Definition at line 10635 of file stdsoap2.cpp.

10636 {
10637  struct soap_clist **cp;
10638  if (soap_check_state(soap))
10639  return;
10640  cp = &soap->clist;
10641  if (p)
10642  {
10643  while (*cp)
10644  {
10645  if (p == (*cp)->ptr)
10646  {
10647  struct soap_clist *q = *cp;
10648  *cp = q->next;
10649  if (q->fdelete(soap, q))
10650  {
10651  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not dealloc data %p: deletion callback failed for object type=%d\n", q->ptr, q->type));
10652 #ifdef SOAP_MEM_DEBUG
10653  fprintf(stderr, "new(object type=%d) = %p not freed: deletion callback failed\n", q->type, q->ptr);
10654 #endif
10655  }
10656  SOAP_FREE(soap, q);
10657  return;
10658  }
10659  cp = &(*cp)->next;
10660  }
10661  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not dealloc data %p: address not in list\n", p));
10662  }
10663  else
10664  {
10665  while (*cp)
10666  {
10667  struct soap_clist *q = *cp;
10668  *cp = q->next;
10669  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Delete %p type=%d (cp=%p)\n", q->ptr, q->type, (void*)q));
10670  if (q->fdelete(soap, q))
10671  {
10672  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not dealloc data %p: deletion callback failed for object type=%d\n", q->ptr, q->type));
10673 #ifdef SOAP_MEM_DEBUG
10674  fprintf(stderr, "new(object type=%d) = %p not freed: deletion callback failed\n", q->type, q->ptr);
10675 #endif
10676  }
10677  SOAP_FREE(soap, q);
10678  }
10679  }
10680  soap->fault = NULL; /* assume this was deallocated */
10681  soap->header = NULL; /* assume this was deallocated */
10682 }
void * ptr
Definition: stdsoap2.h:2071
int(* fdelete)(struct soap *, struct soap_clist *)
Definition: stdsoap2.h:2074

References soap::clist, DBGLOG, soap::fault, soap_clist::fdelete, fprintf(), soap::header, soap_clist::next, NULL, soap_clist::ptr, soap_check_state, SOAP_FREE, TEST(), and soap_clist::type.

Referenced by soap_dealloc().

◆ soap_dime_option()

SOAP_FMAC1 char* SOAP_FMAC2 soap_dime_option ( struct soap soap,
unsigned short  optype,
const char *  option 
)

Definition at line 19176 of file stdsoap2.cpp.

19177 {
19178  size_t n;
19179  char *s = NULL;
19180  if (option)
19181  {
19182  n = strlen(option);
19183  s = (char*)soap_malloc(soap, n + 5);
19184  if (s)
19185  {
19186  s[0] = (char)(optype >> 8);
19187  s[1] = (char)(optype & 0xFF);
19188  s[2] = (char)(n >> 8);
19189  s[3] = (char)(n & 0xFF);
19190  soap_strcpy(s + 4, n + 1, option);
19191  }
19192  }
19193  return s;
19194 }

References NULL, soap_malloc(), and soap_strcpy.

Referenced by soap_set_dime_attachment().

◆ soap_dom_call()

SOAP_FMAC1 int SOAP_FMAC2 soap_dom_call ( struct soap soap,
const char *  endpoint,
const char *  action,
const struct soap_dom_element in,
struct soap_dom_element out 
)

◆ soap_dom_find()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_dom_find ( struct soap_dom_element begin,
const struct soap_dom_element end,
const char *  ns,
const char *  patt,
int  type 
)

◆ soap_dom_find_next()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_dom_find_next ( const struct soap_dom_element elt,
const struct soap_dom_element end,
const char *  ns,
const char *  patt,
int  type 
)

◆ soap_dom_next_attribute()

SOAP_FMAC1 struct soap_dom_attribute* SOAP_FMAC2 soap_dom_next_attribute ( const struct soap_dom_attribute att)

◆ soap_dom_next_element()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_dom_next_element ( const struct soap_dom_element elt,
const struct soap_dom_element end 
)

◆ soap_done()

SOAP_FMAC1 void SOAP_FMAC2 soap_done ( struct soap soap)

Definition at line 7280 of file stdsoap2.cpp.

7281 {
7282 #ifdef SOAP_DEBUG
7283  int i;
7284 #endif
7285  if (soap_check_state(soap))
7286  return;
7287  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Done with context%s\n", soap->state == SOAP_COPY ? " copy" : ""));
7289 #ifdef SOAP_DEBUG
7290  if (soap->clist)
7291  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Warning: managed C++ data was not deallocated with soap_destroy() from the heap managed by context %p\n", (void*)soap));
7292  if (soap->alist)
7293  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Warning: managed C data was not deallocated with soap_end() from the heap managed by context %p\n", (void*)soap));
7294 #endif
7295  soap->alist = NULL;
7296  while (soap->clist)
7297  {
7298  struct soap_clist *p = soap->clist->next;
7299  SOAP_FREE(soap, soap->clist);
7300  soap->clist = p;
7301  }
7302  if (soap->state == SOAP_INIT)
7303  soap->omode &= ~SOAP_IO_UDP; /* to force close the socket */
7304  soap->keep_alive = 0; /* to force close the socket */
7305  if (soap->master == soap->socket) /* do not close twice */
7308 #ifdef WITH_COOKIES
7309  soap_free_cookies(soap);
7310 #endif
7311  while (soap->plugins)
7312  {
7313  struct soap_plugin *p = soap->plugins->next;
7314  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Removing plugin '%s'\n", soap->plugins->id));
7315  if (soap->plugins->fcopy || soap->state == SOAP_INIT)
7318  soap->plugins = p;
7319  }
7320  soap->fplugin = fplugin;
7321 #ifndef WITH_NOHTTP
7322  soap->fpost = http_post;
7323  soap->fget = http_get;
7324  soap->fput = http_put;
7325  soap->fpatch = http_patch;
7326  soap->fdel = http_del;
7327  soap->fopt = http_200;
7328  soap->fhead = http_200;
7329  soap->fform = NULL;
7332  soap->fparse = http_parse;
7334 #endif
7335  soap->fheader = NULL;
7336 #ifndef WITH_NOIO
7337 #ifndef WITH_IPV6
7339 #else
7340  soap->fresolve = NULL;
7341 #endif
7342  soap->faccept = tcp_accept;
7343  soap->fopen = tcp_connect;
7347  soap->fsend = fsend;
7348  soap->frecv = frecv;
7349  soap->fpoll = soap_poll;
7350 #else
7351  soap->fopen = NULL;
7352  soap->fclose = NULL;
7353  soap->fpoll = NULL;
7354 #endif
7355 #ifndef WITH_LEANER
7356  soap->fsvalidate = NULL;
7357  soap->fwvalidate = NULL;
7358  soap->feltbegin = NULL;
7359  soap->feltendin = NULL;
7360  soap->feltbegout = NULL;
7361  soap->feltendout = NULL;
7364  soap->fpreparesend = NULL;
7365  soap->fpreparerecv = NULL;
7368  soap->ffiltersend = NULL;
7369  soap->ffilterrecv = NULL;
7370 #endif
7371  soap->fseterror = NULL;
7372  soap->fignore = NULL;
7373  soap->fserveloop = NULL;
7374 #ifdef WITH_OPENSSL
7375  if (soap->session)
7376  {
7377  SSL_SESSION_free(soap->session);
7378  soap->session = NULL;
7379  }
7380 #endif
7381  if (soap->state == SOAP_INIT)
7382  {
7384  {
7387  }
7388  }
7389 #ifdef WITH_OPENSSL
7390  if (soap->ssl)
7391  {
7392  SSL_free(soap->ssl);
7393  soap->ssl = NULL;
7394  }
7395  if (soap->state == SOAP_INIT)
7396  {
7397  if (soap->ctx)
7398  {
7399  SSL_CTX_free(soap->ctx);
7400  soap->ctx = NULL;
7401  }
7402  }
7403  ERR_clear_error();
7404 # if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
7405  /* OpenSSL libraries handle thread init and deinit */
7406 # elif OPENSSL_VERSION_NUMBER >= 0x10000000L
7407  ERR_remove_thread_state(NULL);
7408 # else
7409  ERR_remove_state(0);
7410 # endif
7411 #endif
7412 #ifdef WITH_GNUTLS
7413  if (soap->state == SOAP_INIT)
7414  {
7415  if (soap->xcred)
7416  {
7417  gnutls_certificate_free_credentials(soap->xcred);
7418  soap->xcred = NULL;
7419  }
7420  if (soap->acred)
7421  {
7422  gnutls_anon_free_client_credentials(soap->acred);
7423  soap->acred = NULL;
7424  }
7425  if (soap->cache)
7426  {
7427  gnutls_priority_deinit(soap->cache);
7428  soap->cache = NULL;
7429  }
7430  if (soap->dh_params)
7431  {
7432  gnutls_dh_params_deinit(soap->dh_params);
7433  soap->dh_params = NULL;
7434  }
7435 # if GNUTLS_VERSION_NUMBER < 0x030300
7436  if (soap->rsa_params)
7437  {
7438  gnutls_rsa_params_deinit(soap->rsa_params);
7439  soap->rsa_params = NULL;
7440  }
7441 #endif
7442  }
7443  if (soap->session)
7444  {
7445  gnutls_deinit(soap->session);
7446  soap->session = NULL;
7447  }
7448 #endif
7449 #ifdef WITH_SYSTEMSSL
7450  if (soap->ssl)
7451  gsk_secure_socket_close(&soap->ssl);
7452  if (soap->state == SOAP_INIT)
7453  if (soap->ctx)
7454  gsk_environment_close(&soap->ctx);
7455 #endif
7456 #ifdef WITH_C_LOCALE
7457  SOAP_FREELOCALE(soap);
7458 #endif
7459 #ifdef WITH_ZLIB
7460  if (soap->d_stream)
7461  {
7463  soap->d_stream = NULL;
7464  }
7465  if (soap->z_buf)
7466  {
7467  SOAP_FREE(soap, soap->z_buf);
7468  soap->z_buf = NULL;
7469  }
7470 #endif
7471 #ifdef SOAP_DEBUG
7472  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free logfiles\n"));
7473  for (i = 0; i < SOAP_MAXLOGS; i++)
7474  {
7475  soap_close_logfile(soap, i);
7476  if (soap->logfile[i])
7477  {
7479  soap->logfile[i] = NULL;
7480  }
7481  }
7482 #endif
7483 #ifdef WITH_SELF_PIPE
7484  close(soap->pipe_fd[0]);
7485  close(soap->pipe_fd[1]);
7486 #endif
7487 #ifdef SOAP_MEM_DEBUG
7488  soap_free_mht(soap);
7489 #endif
7490  soap->state = SOAP_NONE;
7491 }
#define close
Definition: hooks.h:13
static SOAP_SOCKET tcp_accept(struct soap *, SOAP_SOCKET, struct sockaddr *, int *)
Definition: stdsoap2.cpp:6567
static size_t frecv(struct soap *, char *, size_t)
Definition: stdsoap2.cpp:1128
static int http_get(struct soap *)
Definition: stdsoap2.cpp:7971
static void * fplugin(struct soap *, const char *)
Definition: stdsoap2.cpp:22890
static int http_response(struct soap *, int, ULONG64)
Definition: stdsoap2.cpp:8259
SOAP_FMAC1 int SOAP_FMAC2 soap_poll(struct soap *soap)
Definition: stdsoap2.cpp:6907
static int tcp_disconnect(struct soap *)
Definition: stdsoap2.cpp:6589
static int http_patch(struct soap *)
Definition: stdsoap2.cpp:7994
static int http_post(struct soap *, const char *, const char *, int, const char *, const char *, ULONG64)
Definition: stdsoap2.cpp:8030
static int fsend(struct soap *, const char *, size_t)
Definition: stdsoap2.cpp:576
static int tcp_closesocket(struct soap *, SOAP_SOCKET)
Definition: stdsoap2.cpp:6693
static int http_put(struct soap *)
Definition: stdsoap2.cpp:7983
static int http_post_header(struct soap *, const char *, const char *)
Definition: stdsoap2.cpp:8242
static int http_parse(struct soap *)
Definition: stdsoap2.cpp:7501
static int tcp_shutdownsocket(struct soap *, SOAP_SOCKET, int)
Definition: stdsoap2.cpp:6705
static int http_del(struct soap *)
Definition: stdsoap2.cpp:8004
static int http_parse_header(struct soap *, const char *, const char *)
Definition: stdsoap2.cpp:7668
static int http_200(struct soap *)
Definition: stdsoap2.cpp:8014
static SOAP_SOCKET tcp_connect(struct soap *, const char *endpoint, const char *host, int port)
Definition: stdsoap2.cpp:5191
static int tcp_gethost(struct soap *, const char *addr, struct in_addr *inaddr)
Definition: stdsoap2.cpp:5179
#define SOAP_NONE
Definition: stdsoap2.h:1768
#define SOAP_INIT
Definition: stdsoap2.h:1769
#define SOAP_FREE_UNMANAGED(ptr)
Definition: stdsoap2.h:1832
#define SOAP_MAXLOGS
Definition: stdsoap2.h:1243
void(* fdelete)(struct soap *soap, struct soap_plugin *p)
Definition: stdsoap2.h:3033
int(* fresponse)(struct soap *, int, ULONG64)
Definition: stdsoap2.h:2739
int(* ffiltersend)(struct soap *, const char **, size_t *)
Definition: stdsoap2.h:2772
int(* fpreparefinalsend)(struct soap *)
Definition: stdsoap2.h:2769
void * rsa_params
Definition: stdsoap2.h:2947
int(* fsend)(struct soap *, const char *, size_t)
Definition: stdsoap2.h:2751
int(* feltbegout)(struct soap *, const char *, int, const char *)
Definition: stdsoap2.h:2763
int(* fposthdr)(struct soap *, const char *, const char *)
Definition: stdsoap2.h:2738
int(* feltendout)(struct soap *, const char *)
Definition: stdsoap2.h:2764
int(* fshutdownsocket)(struct soap *, SOAP_SOCKET, int)
Definition: stdsoap2.h:2747
int(* fheader)(struct soap *)
Definition: stdsoap2.h:2742
int(* fwvalidate)(struct soap *, const char *, const wchar_t *)
Definition: stdsoap2.h:2760
int(* fpoll)(struct soap *)
Definition: stdsoap2.h:2753
int(* feltendin)(struct soap *, const char *, const char *)
Definition: stdsoap2.h:2762
int(* fserveloop)(struct soap *)
Definition: stdsoap2.h:2756
SOAP_SOCKET(* fopen)(struct soap *, const char *, const char *, int)
Definition: stdsoap2.h:2748
short state
Definition: stdsoap2.h:2666
int(* fpost)(struct soap *, const char *, const char *, int, const char *, const char *, ULONG64)
Definition: stdsoap2.h:2730
void * dh_params
Definition: stdsoap2.h:2946
size_t(* frecv)(struct soap *, char *, size_t)
Definition: stdsoap2.h:2752
void(* fseterror)(struct soap *, const char **c, const char **s)
Definition: stdsoap2.h:2754
int(* fpreparefinalrecv)(struct soap *)
Definition: stdsoap2.h:2770
int(* fsvalidate)(struct soap *, const char *, const char *)
Definition: stdsoap2.h:2759
int(* feltbegin)(struct soap *, const char *)
Definition: stdsoap2.h:2761
int(* fignore)(struct soap *, const char *)
Definition: stdsoap2.h:2755
int(* ffilterrecv)(struct soap *, char *, size_t *, size_t)
Definition: stdsoap2.h:2773
int(* fparsehdr)(struct soap *, const char *, const char *)
Definition: stdsoap2.h:2741
void *(* fplugin)(struct soap *, const char *)
Definition: stdsoap2.h:2757

References soap::alist, soap::clist, close, soap::ctx, soap::d_stream, DBGLOG, soap::dh_params, soap::faccept, soap::fclose, soap::fclosesocket, soap_plugin::fcopy, soap::fdel, soap_plugin::fdelete, soap::feltbegin, soap::feltbegout, soap::feltendin, soap::feltendout, soap::ffilterrecv, soap::ffiltersend, soap::fform, soap::fget, soap::fhead, soap::fheader, soap::fignore, soap::fopen, soap::fopt, soap::fparse, soap::fparsehdr, soap::fpatch, fplugin(), soap::fplugin, soap::fpoll, soap::fpost, soap::fposthdr, soap::fpreparefinalrecv, soap::fpreparefinalsend, soap::fprepareinitrecv, soap::fprepareinitsend, soap::fpreparerecv, soap::fpreparesend, soap::fput, frecv(), soap::frecv, soap::fresolve, soap::fresponse, fsend(), soap::fsend, soap::fserveloop, soap::fseterror, soap::fshutdownsocket, soap::fsvalidate, soap::fwvalidate, http_200(), http_del(), http_get(), http_parse(), http_parse_header(), http_patch(), http_post(), http_post_header(), http_put(), http_response(), soap_plugin::id, soap::keep_alive, soap::logfile, soap::master, soap_clist::next, soap_plugin::next, NULL, soap::omode, soap::plugins, soap::rsa_params, soap::session, soap_check_state, soap_closesock(), SOAP_COPY, SOAP_FREE, soap_free_temp(), SOAP_FREE_UNMANAGED, SOAP_INIT, SOAP_INVALID_SOCKET, SOAP_IO_UDP, SOAP_MAXLOGS, SOAP_NONE, soap_poll(), soap_valid_socket, soap::socket, soap::ssl, soap::state, tcp_accept(), tcp_closesocket(), tcp_connect(), tcp_disconnect(), tcp_gethost(), tcp_shutdownsocket(), TEST(), and soap::z_buf.

Referenced by ACSoapThread(), soap_cleanup(), soap_copy(), soap_copy_context(), and soap_free().

◆ soap_double2s()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_double2s ( struct soap soap,
double  n 
)

Definition at line 16767 of file stdsoap2.cpp.

16768 {
16769 #if defined(WITH_C_LOCALE)
16770 # if !defined(WIN32)
16771  SOAP_LOCALE_T locale;
16772 # endif
16773 #else
16774  char *s;
16775 #endif
16776  if (soap_isnan(n))
16777  return "NaN";
16778  if (soap_ispinfd(n))
16779  return "INF";
16780  if (soap_isninfd(n))
16781  return "-INF";
16782 #if defined(WITH_C_LOCALE)
16783 # ifdef WIN32
16784  _sprintf_s_l(soap->tmpbuf, _countof(soap->tmpbuf), soap->double_format, SOAP_LOCALE(soap), n);
16785 # else
16786  locale = uselocale(SOAP_LOCALE(soap));
16787  (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), 40), soap->double_format, n);
16788  uselocale(locale);
16789 # endif
16790 #else
16791  (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), 40), soap->double_format, n);
16792  s = strchr(soap->tmpbuf, ','); /* convert decimal comma to DP */
16793  if (s)
16794  *s = '.';
16795 #endif
16796  return soap->tmpbuf;
16797 }
#define soap_isninfd(n)
Definition: stdsoap2.h:1453
#define soap_isnan(n)
Definition: stdsoap2.h:1439
#define soap_ispinfd(n)
Definition: stdsoap2.h:1451
const char * double_format
Definition: stdsoap2.h:2672

References soap::double_format, soap_isnan, soap_isninfd, soap_ispinfd, SOAP_SNPRINTF, and soap::tmpbuf.

Referenced by soap_outdouble().

◆ soap_dup_xsd__anyAttribute()

SOAP_FMAC1 struct soap_dom_attribute* SOAP_FMAC2 soap_dup_xsd__anyAttribute ( struct soap soap,
struct soap_dom_attribute d,
const struct soap_dom_attribute a 
)

◆ soap_dup_xsd__anyType()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_dup_xsd__anyType ( struct soap soap,
struct soap_dom_element d,
const struct soap_dom_element a 
)

◆ soap_element()

SOAP_FMAC1 int SOAP_FMAC2 soap_element ( struct soap soap,
const char *  tag,
int  id,
const char *  type 
)

Definition at line 12763 of file stdsoap2.cpp.

12764 {
12765 #ifndef WITH_LEAN
12766  const char *s;
12767 #endif
12768  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Element begin tag='%s' level='%u' id='%d' type='%s'\n", tag, soap->level, id, type ? type : SOAP_STR_EOS));
12769 #ifdef WITH_DOM
12770 #ifndef WITH_LEAN
12771  if (soap_tagsearch(soap->wsuid, tag))
12772  {
12773  size_t i;
12774  for (s = tag, i = 0; *s && i < sizeof(soap->href) - 1; s++, i++)
12775  soap->href[i] = *s == ':' ? '-' : *s;
12776  soap->href[i] = '\0';
12777  if (soap_set_attr(soap, "wsu:Id", soap->href, 1))
12778  return soap->error;
12779  }
12780 #endif
12781 #endif
12782  soap->level++;
12783  if (soap->level > soap->maxlevel)
12784  return soap->error = SOAP_LEVEL;
12785 #ifdef WITH_DOM
12786 #ifndef WITH_LEAN
12787  if ((soap->mode & SOAP_XML_CANONICAL) && !(soap->mode & SOAP_DOM_ASIS))
12788  {
12789  if (soap->evlev >= soap->level)
12790  soap->evlev = 0;
12791  if (soap->event == SOAP_SEC_BEGIN && !soap->evlev)
12792  {
12793  struct soap_nlist *np;
12794  /* non-nested wsu:Id found: clear xmlns, re-emit them for exc-c14n */
12795  for (np = soap->nlist; np; np = np->next)
12796  {
12797  int p = soap->c14ninclude ? *soap->c14ninclude == '+' || soap_tagsearch(soap->c14ninclude, np->id) != NULL : 0;
12798  if (np->index == 2 || p)
12799  {
12800  struct soap_nlist *np1 = soap_push_ns(soap, np->id, np->ns, 1, 0);
12801  if (np1 && !p)
12802  np1->index = 0;
12803  }
12804  }
12805  soap->evlev = soap->level;
12806  }
12807  }
12808 #endif
12809  if ((soap->mode & SOAP_XML_DOM))
12810  {
12811  struct soap_dom_element *elt = (struct soap_dom_element*)soap_malloc(soap, sizeof(struct soap_dom_element));
12812  if (!elt)
12813  return soap->error = SOAP_EOM;
12814  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Adding DOM element tag='%s' %p (parent='%s' %p)\n", tag, elt, soap->dom ? soap->dom->name : "(null)", soap->dom));
12815  elt->soap = soap;
12816  elt->next = NULL;
12817  elt->prnt = soap->dom;
12818  elt->elts = NULL;
12819  elt->atts = NULL;
12820  elt->nstr = NULL;
12821  elt->name = soap_strdup(soap, tag);
12822  elt->lead = NULL;
12823  elt->text = NULL;
12824  elt->code = NULL;
12825  elt->tail = NULL;
12826  elt->node = NULL;
12827  elt->type = 0;
12828  if (soap->dom)
12829  {
12830  struct soap_dom_element *p = soap->dom->elts;
12831  if (p)
12832  {
12833  while (p->next)
12834  p = p->next;
12835  p->next = elt;
12836  }
12837  else
12838  {
12839  soap->dom->elts = elt;
12840  }
12841  }
12842  soap->dom = elt;
12843  if (!elt->name)
12844  return soap->error = SOAP_EOM;
12845  }
12846  else
12847  {
12848 #endif
12849 #ifndef WITH_LEAN
12850  if (!soap->ns)
12851  {
12853  return soap->error;
12854  }
12855  else if ((soap->mode & SOAP_XML_INDENT))
12856  {
12857  if (soap->ns == 1 && soap_send_raw(soap, soap_indent, soap->level < sizeof(soap_indent) ? soap->level : sizeof(soap_indent) - 1))
12858  return soap->error;
12859  soap->body = 1;
12860  }
12861  if ((soap->mode & SOAP_XML_DEFAULTNS))
12862  {
12863  size_t n = 0;
12864  s = strchr(tag, ':');
12865  if (s)
12866  n = s++ - tag;
12867  else
12868  s = tag;
12869  if (soap_send_raw(soap, "<", 1)
12870  || soap_send(soap, s))
12871  return soap->error;
12872  if (n)
12873  {
12874  struct Namespace *ns = soap->local_namespaces;
12875  for (; ns && ns->id; ns++)
12876  {
12877  if (*ns->id && ns->ns && !strncmp(ns->id, tag, n) && !ns->id[n])
12878  {
12879  if (!soap->nlist || *soap->nlist->id || (soap->nlist->ns && strcmp(soap->nlist->ns, ns->ns)))
12880  {
12881  (void)soap_push_ns(soap, SOAP_STR_EOS, ns->out ? ns->out : ns->ns, 0, 0);
12882  if (soap_attribute(soap, "xmlns", ns->out ? ns->out : ns->ns))
12883  return soap->error;
12884  }
12885  break;
12886  }
12887  }
12888  }
12889 #ifndef WITH_NOEMPTYNAMESPACES
12890  else if (!soap->nlist || *soap->nlist->id || (soap->nlist->ns && *soap->nlist->ns))
12891  {
12892  (void)soap_push_ns(soap, SOAP_STR_EOS, SOAP_STR_EOS, 0, 0);
12893  if (soap_attribute(soap, "xmlns", SOAP_STR_EOS))
12894  return soap->error;
12895  }
12896 #endif
12897  }
12898  else
12899 #endif
12900  if (soap_send_raw(soap, "<", 1)
12901  || soap_send(soap, tag))
12902  return soap->error;
12903 #ifdef WITH_DOM
12904  }
12905 #endif
12906  if (!soap->ns)
12907  {
12908  struct Namespace *ns = soap->local_namespaces;
12909  int k = -1;
12910  if (ns)
12911  {
12912  while (k-- && ns->id)
12913  {
12914  const char *t = ns->out;
12915  if (!t)
12916  t = ns->ns;
12917  if (*ns->id && t && *t)
12918  {
12919  (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), strlen(ns->id) + 6), "xmlns:%s", ns->id);
12920  if (soap_attribute(soap, soap->tmpbuf, t))
12921  return soap->error;
12922  }
12923  ns++;
12924  }
12925  }
12926  }
12927  soap->ns = 1; /* namespace table control: ns = 0 or 2 to start, then 1 to stop dumping the table */
12928 #ifndef WITH_LEAN
12929  if ((soap->mode & SOAP_XML_CANONICAL))
12930  {
12931  if ((soap->mode & SOAP_XML_DEFAULTNS))
12933  else
12934  soap_utilize_ns(soap, tag, 0);
12935  }
12936 #endif
12937  if (id > 0)
12938  {
12939  (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), sizeof(SOAP_BASEREFNAME) + 20), SOAP_BASEREFNAME "%d", id);
12940  if (soap->version == 2)
12941  {
12942  if (soap_attribute(soap, "SOAP-ENC:id", soap->tmpbuf))
12943  return soap->error;
12944  }
12945  else if (soap_attribute(soap, "id", soap->tmpbuf))
12946  {
12947  return soap->error;
12948  }
12949  }
12950  if (type && *type && !(soap->mode & SOAP_XML_NOTYPE))
12951  {
12952 #ifndef WITH_LEAN
12954  soap_utilize_ns(soap, type, 0);
12955 #endif
12956  if (soap_attribute(soap, "xsi:type", type))
12957  return soap->error;
12958  }
12959  if (soap->null && soap->position > 0 && soap->version == 1)
12960  {
12961  int i;
12962  (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf) - 1, 20), "[%d", soap->positions[0]);
12963  for (i = 1; i < soap->position; i++)
12964  {
12965  size_t l = strlen(soap->tmpbuf);
12966  (SOAP_SNPRINTF(soap->tmpbuf + l, sizeof(soap->tmpbuf) - l - 1, 20), ",%d", soap->positions[i]);
12967  }
12968  soap_strcat(soap->tmpbuf, sizeof(soap->tmpbuf), "]");
12969  if (soap_attribute(soap, "SOAP-ENC:position", soap->tmpbuf))
12970  return soap->error;
12971  }
12972  if (soap->mustUnderstand)
12973  {
12974  if (soap->actor && *soap->actor)
12975  {
12976  if (soap_attribute(soap, soap->version == 2 ? "SOAP-ENV:role" : "SOAP-ENV:actor", soap->actor))
12977  return soap->error;
12978  }
12979  if (soap_attribute(soap, "SOAP-ENV:mustUnderstand", soap->version == 2 ? "true" : "1"))
12980  return soap->error;
12981  soap->mustUnderstand = 0;
12982  }
12983  if (soap->encoding)
12984  {
12986  {
12987  if (!*soap->encodingStyle)
12988  {
12989  if (soap->local_namespaces[1].out)
12991  else
12993  }
12994  if (soap->encodingStyle && soap_attribute(soap, "SOAP-ENV:encodingStyle", soap->encodingStyle))
12995  return soap->error;
12996  }
12997  else
12998  {
12999  soap->encodingStyle = NULL;
13000  }
13001  soap->encoding = 0;
13002  }
13003  soap->null = 0;
13004  soap->position = 0;
13005  return SOAP_OK;
13006 }
static const char soap_indent[21]
Definition: stdsoap2.cpp:336
SOAP_FMAC1 void SOAP_FMAC2 soap_strcat(char *t, size_t n, const char *s)
Definition: stdsoap2.cpp:13033
#define SOAP_XML_INDENT
Definition: stdsoap2.h:1710
#define SOAP_XML_NOTYPE
Definition: stdsoap2.h:1716
#define SOAP_DOM_ASIS
Definition: stdsoap2.h:1720
#define SOAP_BASEREFNAME
Definition: stdsoap2.h:1256
#define SOAP_SEC_BEGIN
Definition: stdsoap2.h:1789
#define SOAP_XML_DEFAULTNS
Definition: stdsoap2.h:1712
const char * id
Definition: stdsoap2.h:2002
struct soap_dom_element * next
Definition: stdsoap2.h:2485
const char * nstr
Definition: stdsoap2.h:2489
struct soap * soap
Definition: stdsoap2.h:2497
const char * code
Definition: stdsoap2.h:2493
const char * lead
Definition: stdsoap2.h:2491
const char * tail
Definition: stdsoap2.h:2494
const void * node
Definition: stdsoap2.h:2495
struct soap_dom_element * elts
Definition: stdsoap2.h:2487
struct soap_dom_element * prnt
Definition: stdsoap2.h:2486
const char * name
Definition: stdsoap2.h:2490
const char * text
Definition: stdsoap2.h:2492
const char * prolog
Definition: stdsoap2.h:2849
const char * wsuid
Definition: stdsoap2.h:2889
const char * actor
Definition: stdsoap2.h:2701
int positions[SOAP_MAXDIMS]
Definition: stdsoap2.h:2830

References soap::actor, soap_dom_element::atts, soap::body, soap::c14ninclude, soap_dom_element::code, DBGLOG, soap::dom, soap_dom_element::elts, soap::encoding, soap::encodingStyle, soap::error, soap::event, soap::evlev, soap::href, Namespace::id, soap_nlist::id, if(), soap_nlist::index, mpq::l, soap_dom_element::lead, soap::level, soap::local_namespaces, soap::maxlevel, soap::mode, soap::mustUnderstand, soap_dom_element::name, soap_nlist::next, soap_dom_element::next, soap::nlist, soap_dom_element::node, Namespace::ns, soap_nlist::ns, soap::ns, soap_dom_element::nstr, soap::null, NULL, Namespace::out, soap::position, soap::positions, soap_dom_element::prnt, soap::prolog, soap, soap_dom_element::soap, soap_attribute(), SOAP_BASEREFNAME, SOAP_DOM_ASIS, SOAP_EOM, soap_indent, SOAP_LEVEL, soap_malloc(), SOAP_OK, soap_push_ns(), SOAP_SEC_BEGIN, soap_send(), soap_send_raw(), soap_set_attr(), SOAP_SNPRINTF, SOAP_STR_EOS, soap_strcat(), soap_strdup(), soap_tagsearch(), soap_utilize_ns(), SOAP_XML_CANONICAL, SOAP_XML_CANONICAL_NA, SOAP_XML_DEFAULTNS, SOAP_XML_DOM, SOAP_XML_INDENT, SOAP_XML_NOTYPE, soap_dom_element::tail, TEST(), soap_dom_element::text, soap::tmpbuf, soap_dom_element::type, soap::version, and soap::wsuid.

Referenced by soap_array_begin_out(), soap_element_begin_out(), soap_element_empty(), soap_element_href(), soap_element_nil(), soap_element_null(), and soap_element_result().

◆ soap_element_begin_in()

SOAP_FMAC1 int SOAP_FMAC2 soap_element_begin_in ( struct soap soap,
const char *  tag,
int  nillable,
const char *  type 
)

Definition at line 13889 of file stdsoap2.cpp.

13890 {
13891  if (!soap_peek_element(soap))
13892  {
13893  if (soap->other)
13894  return soap->error = SOAP_TAG_MISMATCH;
13895  if (tag && *tag == '-')
13896  return SOAP_OK;
13897  soap->error = soap_match_tag(soap, soap->tag, tag);
13898  if (!soap->error)
13899  {
13900  if (type && *soap->type && soap_match_tag(soap, soap->type, type))
13901  return soap->error = SOAP_TYPE;
13902  soap->peeked = 0;
13903  if (!nillable && soap->null && (soap->mode & SOAP_XML_STRICT))
13904  return soap->error = SOAP_NULL;
13905  if (soap->body)
13906  {
13907  soap->level++;
13908  if (soap->level > soap->maxlevel)
13909  return soap->error = SOAP_LEVEL;
13910  }
13911  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Begin tag found (level=%u) '%s'='%s'\n", soap->level, soap->tag, tag ? tag : SOAP_STR_EOS));
13912  soap->error = SOAP_OK;
13913  }
13914  }
13915  else if (soap->error == SOAP_NO_TAG && tag && *tag == '-')
13916  {
13917  soap->error = SOAP_OK;
13918  }
13919  return soap->error;
13920 }
SOAP_FMAC1 int SOAP_FMAC2 soap_match_tag(struct soap *soap, const char *tag1, const char *tag2)
Definition: stdsoap2.cpp:3776
SOAP_FMAC1 int SOAP_FMAC2 soap_peek_element(struct soap *soap)
Definition: stdsoap2.cpp:14442

References soap::body, DBGLOG, soap::error, soap::level, soap::maxlevel, soap::mode, soap::null, soap::other, soap::peeked, SOAP_LEVEL, soap_match_tag(), SOAP_NO_TAG, SOAP_NULL, SOAP_OK, soap_peek_element(), SOAP_STR_EOS, SOAP_TAG_MISMATCH, SOAP_TYPE, SOAP_XML_STRICT, soap::tag, TEST(), and soap::type.

Referenced by soap_body_begin_in(), soap_envelope_begin_in(), soap_in_ns1__executeCommand(), soap_in_ns1__executeCommandResponse(), soap_in_PointerToSOAP_ENV__Code(), soap_in_PointerToSOAP_ENV__Detail(), soap_in_PointerToSOAP_ENV__Reason(), soap_in_PointerTostring(), soap_in_SOAP_ENV__Code(), soap_in_SOAP_ENV__Detail(), soap_in_SOAP_ENV__Fault(), soap_in_SOAP_ENV__Header(), soap_in_SOAP_ENV__Reason(), soap_inbyte(), soap_indateTime(), soap_indouble(), soap_infloat(), soap_inint(), soap_inliteral(), soap_inlong(), soap_inLONG64(), soap_inshort(), soap_instring(), soap_inULONG64(), soap_inunsignedByte(), soap_inunsignedInt(), soap_inunsignedLong(), soap_inunsignedShort(), soap_inwliteral(), soap_inwstring(), soap_recv_fault(), and soap_xop_forward().

◆ soap_element_begin_out()

SOAP_FMAC1 int SOAP_FMAC2 soap_element_begin_out ( struct soap soap,
const char *  tag,
int  id,
const char *  type 
)

◆ soap_element_empty()

SOAP_FMAC1 int SOAP_FMAC2 soap_element_empty ( struct soap soap,
const char *  tag 
)

Definition at line 13622 of file stdsoap2.cpp.

13623 {
13624  if (soap_element(soap, tag, -1, NULL))
13625  return soap->error;
13626  return soap_element_start_end_out(soap, tag);
13627 }

References soap::error, NULL, soap_element(), and soap_element_start_end_out().

Referenced by soap_putelement().

◆ soap_element_end()

SOAP_FMAC1 int SOAP_FMAC2 soap_element_end ( struct soap soap,
const char *  tag 
)

Definition at line 13515 of file stdsoap2.cpp.

13516 {
13517 #ifndef WITH_LEAN
13518  const char *s;
13519 #endif
13520  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Element ending tag='%s'\n", tag));
13521 #ifdef WITH_DOM
13522  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
13523  {
13524  if (soap->dom->prnt)
13525  soap->dom = soap->dom->prnt;
13526  return SOAP_OK;
13527  }
13528 #endif
13529 #ifndef WITH_LEAN
13530  if (soap->nlist)
13532  if ((soap->mode & SOAP_XML_INDENT))
13533  {
13534  if (!soap->body)
13535  {
13536  if (soap_send_raw(soap, soap_indent, soap->level < sizeof(soap_indent) ? soap->level : sizeof(soap_indent) - 1))
13537  return soap->error;
13538  }
13539  soap->body = 0;
13540  }
13541  if ((soap->mode & SOAP_XML_DEFAULTNS) && (s = strchr(tag, ':')) != NULL)
13542  tag = s + 1;
13543 #endif
13544  if (soap_send_raw(soap, "</", 2)
13545  || soap_send(soap, tag))
13546  return soap->error;
13547  soap->level--; /* decrement level just before > */
13548  return soap_send_raw(soap, ">", 1);
13549 }
SOAP_FMAC1 void SOAP_FMAC2 soap_pop_namespace(struct soap *soap)
Definition: stdsoap2.cpp:3604

References soap::body, DBGLOG, soap::dom, soap::error, soap::level, soap::mode, soap::nlist, NULL, soap_dom_element::prnt, soap_indent, SOAP_OK, soap_pop_namespace(), soap_send(), soap_send_raw(), SOAP_XML_DEFAULTNS, SOAP_XML_DOM, SOAP_XML_INDENT, and TEST().

Referenced by soap_element_end_out().

◆ soap_element_end_in()

SOAP_FMAC1 int SOAP_FMAC2 soap_element_end_in ( struct soap soap,
const char *  tag 
)

Definition at line 13927 of file stdsoap2.cpp.

13928 {
13929  soap_wchar c;
13930  char *s = NULL;
13931  int n = 0;
13932  if (tag && *tag == '-')
13933  return SOAP_OK;
13934  if (soap->error == SOAP_NO_TAG)
13935  soap->error = SOAP_OK;
13936 #ifdef WITH_DOM
13937  /* this whitespace or mixed content is significant for DOM "as-is" */
13938  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
13939  {
13940  const char *t = soap->dom->code; /* save XML code */
13941  s = soap_string_in(soap, -1, -1, -1, NULL);
13942  if (!soap->peeked && !s)
13943  return soap->error;
13944  if (soap->dom->prnt)
13945  soap->dom = soap->dom->prnt;
13946  if (s && (soap->mode & SOAP_XML_STRICT))
13947  {
13948  for (; *s; s++)
13949  if (!soap_coblank((soap_wchar)*s))
13950  return soap->error = SOAP_END_TAG; /* reject mixed content before ending tag */
13951  }
13952  soap->dom->code = t; /* restore XML code */
13953  }
13954 #endif
13955  if (soap->peeked)
13956  {
13957  if (*soap->tag)
13958  n++;
13959  soap->peeked = 0;
13960  }
13961  do
13962  {
13963  while (((c = soap_get(soap)) != SOAP_TT))
13964  {
13965  if ((int)c == EOF)
13966  return soap->error = SOAP_CHK_EOF;
13967  if (!soap_coblank(c))
13968  {
13969  if ((soap->mode & SOAP_XML_STRICT))
13970  return soap->error = SOAP_END_TAG; /* reject mixed content before ending tag */
13971  if (c == SOAP_LT)
13972  n++;
13973  else if (c == '/')
13974  {
13975  c = soap_get(soap);
13976  if (c == SOAP_GT && n > 0)
13977  n--;
13978  else
13979  soap_unget(soap, c);
13980  }
13981  }
13982  }
13983  } while (n-- > 0);
13984  s = soap->tag;
13985  n = sizeof(soap->tag);
13986  while ((c = soap_get(soap)) > 32)
13987  {
13988  if (n > 1)
13989  {
13990  *s++ = (char)c;
13991  n--;
13992  }
13993  }
13994  *s = '\0';
13995  if ((int)c == EOF)
13996  return soap->error = SOAP_CHK_EOF;
13997  while (soap_coblank(c))
13998  c = soap_get(soap);
13999  if (c != SOAP_GT)
14000  return soap->error = SOAP_SYNTAX_ERROR;
14001 #ifndef WITH_LEAN
14002 #ifdef WITH_DOM
14003  if (soap->feltendin)
14004  {
14005  int err = soap->error;
14006  soap->error = soap->feltendin(soap, soap->tag, tag);
14007  if (soap->error)
14008  return soap->error;
14009  if (err)
14010  return soap->error = err; /* restore error */
14011  }
14012 #endif
14013 #endif
14014  if (tag && (soap->mode & SOAP_XML_STRICT))
14015  {
14017  if (soap_match_tag(soap, soap->tag, tag))
14018  {
14019  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End tag '%s' does not match '%s'\n", soap->tag, tag ? tag : SOAP_STR_EOS));
14020  return soap->error = SOAP_SYNTAX_ERROR;
14021  }
14022  }
14023  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End tag found (level=%u) '%s'='%s'\n", soap->level, soap->tag, tag ? tag : SOAP_STR_EOS));
14024  soap->level--;
14025  return SOAP_OK;
14026 }
#define SOAP_TT
Definition: stdsoap2.cpp:109
#define SOAP_LT
Definition: stdsoap2.cpp:108
#define SOAP_GT
Definition: stdsoap2.cpp:110
SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_get(struct soap *soap)
Definition: stdsoap2.cpp:1959
SOAP_FMAC1 char *SOAP_FMAC2 soap_string_in(struct soap *soap, int flag, long minlen, long maxlen, const char *pattern)
Definition: stdsoap2.cpp:15157

References mpq::c, soap_dom_element::code, DBGLOG, soap::dom, soap::error, soap::feltendin, soap::level, soap::mode, NULL, soap::peeked, soap_dom_element::prnt, SOAP_CHK_EOF, soap_coblank, SOAP_END_TAG, soap_get(), SOAP_GT, SOAP_LT, soap_match_tag(), SOAP_NO_TAG, SOAP_OK, soap_pop_namespace(), SOAP_STR_EOS, soap_string_in(), SOAP_SYNTAX_ERROR, SOAP_TT, soap_unget, SOAP_XML_DOM, SOAP_XML_STRICT, soap::tag, and TEST().

Referenced by soap_body_end_in(), soap_envelope_end_in(), soap_ignore(), soap_in_ns1__executeCommand(), soap_in_ns1__executeCommandResponse(), soap_in_PointerToSOAP_ENV__Code(), soap_in_PointerToSOAP_ENV__Detail(), soap_in_PointerToSOAP_ENV__Reason(), soap_in_PointerTostring(), soap_in_SOAP_ENV__Code(), soap_in_SOAP_ENV__Detail(), soap_in_SOAP_ENV__Fault(), soap_in_SOAP_ENV__Header(), soap_in_SOAP_ENV__Reason(), soap_inbyte(), soap_indateTime(), soap_indouble(), soap_infloat(), soap_inint(), soap_inliteral(), soap_inlong(), soap_inLONG64(), soap_inshort(), soap_instring(), soap_inULONG64(), soap_inunsignedByte(), soap_inunsignedInt(), soap_inunsignedLong(), soap_inunsignedShort(), soap_inwliteral(), soap_inwstring(), soap_recv_fault(), and soap_xop_forward().

◆ soap_element_end_out()

SOAP_FMAC1 int SOAP_FMAC2 soap_element_end_out ( struct soap soap,
const char *  tag 
)

◆ soap_element_href()

SOAP_FMAC1 int SOAP_FMAC2 soap_element_href ( struct soap soap,
const char *  tag,
int  id,
const char *  ref,
const char *  val 
)

Definition at line 13578 of file stdsoap2.cpp.

13579 {
13580  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Element '%s' reference %s='%s'\n", tag, ref, val));
13581  if (soap_element(soap, tag, id, NULL)
13582  || soap_attribute(soap, ref, val)
13584  return soap->error;
13585  soap->body = 0;
13586  return SOAP_OK;
13587 }

References soap::body, DBGLOG, soap::error, NULL, soap_attribute(), soap_element(), soap_element_start_end_out(), SOAP_OK, and TEST().

Referenced by soap_attachment(), and soap_element_ref().

◆ soap_element_id()

SOAP_FMAC1 int SOAP_FMAC2 soap_element_id ( struct soap soap,
const char *  tag,
int  id,
const void *  p,
const void *  a,
int  n,
const char *  type,
int  t,
char **  mark 
)

Definition at line 13647 of file stdsoap2.cpp.

13648 {
13649  (void)a; (void)n;
13650  if (!p)
13651  {
13652  soap->error = soap_element_null(soap, tag, id, type);
13653  return -1;
13654  }
13655 #ifndef WITH_NOIDREF
13656  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Element_id %p type=%d id=%d\n", p, t, id));
13657  if ((!soap->encodingStyle && !(soap->mode & SOAP_XML_GRAPH)) || (soap->mode & SOAP_XML_TREE))
13658  return soap_check_and_mark(soap, p, t, mark);
13659  if (mark)
13660  *mark = NULL;
13661  if (id < -1)
13662  return soap_embed(soap, p, a, n, t);
13663  else if (id <= 0)
13664  {
13665  struct soap_plist *pp;
13666  if (a)
13667  id = soap_array_pointer_lookup(soap, p, a, n, t, &pp);
13668  else
13669  id = soap_pointer_lookup(soap, p, t, &pp);
13670  if (id)
13671  {
13672  if (soap_is_embedded(soap, pp))
13673  {
13674  soap_element_ref(soap, tag, 0, id);
13675  return -1;
13676  }
13677  if (soap_is_single(soap, pp))
13678  return 0;
13679  soap_set_embedded(soap, pp);
13680  }
13681  }
13682  return id;
13683 #else
13684  return soap_check_and_mark(soap, p, t, mark);
13685 #endif
13686 }
SOAP_FMAC1 int SOAP_FMAC2 soap_check_and_mark(struct soap *soap, const void *p, int t, char **mark)
Definition: stdsoap2.cpp:13693
SOAP_FMAC1 int SOAP_FMAC2 soap_embed(struct soap *soap, const void *p, const void *a, int n, int t)
Definition: stdsoap2.cpp:9627
SOAP_FMAC1 int SOAP_FMAC2 soap_is_single(struct soap *soap, struct soap_plist *pp)
Definition: stdsoap2.cpp:10182
SOAP_FMAC1 int SOAP_FMAC2 soap_is_embedded(struct soap *soap, struct soap_plist *pp)
Definition: stdsoap2.cpp:10159
SOAP_FMAC1 int SOAP_FMAC2 soap_element_ref(struct soap *soap, const char *tag, int id, int href)
Definition: stdsoap2.cpp:13556
SOAP_FMAC1 int SOAP_FMAC2 soap_element_null(struct soap *soap, const char *tag, int id, const char *type)
Definition: stdsoap2.cpp:13594
SOAP_FMAC1 void SOAP_FMAC2 soap_set_embedded(struct soap *soap, struct soap_plist *pp)
Definition: stdsoap2.cpp:10200

References mpq::a, DBGLOG, soap::encodingStyle, soap::error, soap_plist::id, soap::mode, NULL, soap_array_pointer_lookup(), soap_check_and_mark(), soap_element_null(), soap_element_ref(), soap_embed(), soap_is_embedded(), soap_is_single(), soap_pointer_lookup(), soap_set_embedded(), SOAP_XML_GRAPH, SOAP_XML_TREE, and TEST().

Referenced by soap_attachment(), soap_out_PointerToSOAP_ENV__Code(), soap_out_PointerToSOAP_ENV__Detail(), soap_out_PointerToSOAP_ENV__Reason(), soap_out_PointerTostring(), soap_outstring(), and soap_outwstring().

◆ soap_element_nil()

SOAP_FMAC1 int SOAP_FMAC2 soap_element_nil ( struct soap soap,
const char *  tag 
)

Definition at line 13634 of file stdsoap2.cpp.

13635 {
13636  if (soap_element(soap, tag, -1, NULL)
13637  || (soap_attribute(soap, "xsi:nil", "true")))
13638  return soap->error;
13639  return soap_element_start_end_out(soap, tag);
13640 }

References soap::error, NULL, soap_attribute(), soap_element(), and soap_element_start_end_out().

◆ soap_element_null()

SOAP_FMAC1 int SOAP_FMAC2 soap_element_null ( struct soap soap,
const char *  tag,
int  id,
const char *  type 
)

Definition at line 13594 of file stdsoap2.cpp.

13595 {
13596  struct soap_attribute *tp = NULL;
13597  for (tp = soap->attributes; tp; tp = tp->next)
13598  if (tp->visible)
13599  break;
13600  if (tp || (soap->version == 2 && soap->position > 0) || id > 0 || (soap->mode & SOAP_XML_NIL))
13601  {
13602  if (soap_element(soap, tag, id, type)
13603  || (!tp && soap_attribute(soap, "xsi:nil", "true"))
13605  return soap->error;
13606  soap->body = 0;
13607  }
13608  else
13609  {
13610  soap->null = 1;
13611  soap->position = 0;
13612  soap->mustUnderstand = 0;
13613  }
13614  return SOAP_OK;
13615 }
#define SOAP_XML_NIL
Definition: stdsoap2.h:1715

References soap::attributes, soap::body, soap::error, soap::mode, soap::mustUnderstand, soap_attribute::next, soap::null, NULL, soap::position, soap_attribute(), soap_element(), soap_element_start_end_out(), SOAP_OK, SOAP_XML_NIL, soap::version, and soap_attribute::visible.

Referenced by soap_element_id(), soap_outstring(), and soap_outwstring().

◆ soap_element_ref()

SOAP_FMAC1 int SOAP_FMAC2 soap_element_ref ( struct soap soap,
const char *  tag,
int  id,
int  href 
)

Definition at line 13556 of file stdsoap2.cpp.

13557 {
13558  const char *s = "ref";
13559  int n = 1;
13560  if (soap->version == 1)
13561  {
13562  s = "href";
13563  n = 0;
13564  }
13565  else if (soap->version == 2)
13566  {
13567  s = "SOAP-ENC:ref";
13568  }
13569  (SOAP_SNPRINTF(soap->href, sizeof(soap->href), sizeof(SOAP_BASEREFNAME) + 21), "#" SOAP_BASEREFNAME "%d", href);
13570  return soap_element_href(soap, tag, id, s, soap->href + n);
13571 }

References soap::href, SOAP_BASEREFNAME, soap_element_href(), SOAP_SNPRINTF, and soap::version.

Referenced by soap_element_id().

◆ soap_element_result()

SOAP_FMAC1 int SOAP_FMAC2 soap_element_result ( struct soap soap,
const char *  tag 
)

Definition at line 13795 of file stdsoap2.cpp.

13796 {
13797  if (soap->version == 2 && soap->encodingStyle)
13798  {
13799  if (soap_element(soap, "SOAP-RPC:result", 0, NULL)
13800  || soap_attribute(soap, "xmlns:SOAP-RPC", soap_rpc)
13802  || soap_string_out(soap, tag, 0)
13803  || soap_element_end_out(soap, "SOAP-RPC:result"))
13804  return soap->error;
13805  }
13806  return SOAP_OK;
13807 }
static const char soap_rpc[35]
Definition: stdsoap2.cpp:329

References soap::encodingStyle, soap::error, NULL, soap_attribute(), soap_element(), soap_element_end_out(), soap_element_start_end_out(), SOAP_OK, soap_rpc, soap_string_out(), and soap::version.

◆ soap_element_start_end_out()

SOAP_FMAC1 int SOAP_FMAC2 soap_element_start_end_out ( struct soap soap,
const char *  tag 
)

Definition at line 13384 of file stdsoap2.cpp.

13385 {
13386  struct soap_attribute *tp;
13387 #ifndef WITH_LEAN
13388  if ((soap->mode & SOAP_XML_CANONICAL))
13389  {
13390  struct soap_nlist *np;
13391  for (tp = soap->attributes; tp; tp = tp->next)
13392  {
13393  if (tp->visible && *tp->name && strchr(tp->name, ':'))
13394  soap_utilize_ns(soap, tp->name, 0);
13395  }
13396  if (soap->event == SOAP_SEC_BEGIN)
13397  {
13398  for (np = soap->nlist; np; np = np->next)
13399  if (soap_tagsearch(soap->c14ninclude, np->id))
13400  (void)soap_push_ns(soap, np->id, np->ns, 1, 0);
13401  soap->event = 0;
13402  soap->evlev = 0;
13403  }
13404  for (np = soap->nlist; np; np = np->next)
13405  {
13406  if (np->ns && np->index == 1)
13407  {
13408  if (*np->id)
13409  (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), strlen(np->id) + 6), "xmlns:%s", np->id);
13410  else
13411  soap_strcpy(soap->tmpbuf, sizeof(soap->tmpbuf), "xmlns");
13412  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Enabling utilized binding (level=%u) %s='%s' SEC-BEGIN=%d c14ninclude='%s'\n", np->level, soap->tmpbuf, np->ns, soap->event == SOAP_SEC_BEGIN, soap->c14ninclude ? soap->c14ninclude : "(null)"));
13413  np->index = 2;
13414  soap->level--;
13415  if (*np->id || *np->ns || soap->level > 1)
13416  if (soap_set_attr(soap, soap->tmpbuf, np->ns, 1))
13417  return soap->error;
13418  soap->level++;
13419  }
13420  else
13421  {
13422  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Binding (level=%u) %s='%s' utilized=%d\n", np->level, np->id, np->ns, np->index));
13423  }
13424  }
13425  }
13426 #endif
13427 #ifdef WITH_DOM
13428  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
13429  {
13430  struct soap_dom_attribute **att;
13431  att = &soap->dom->atts;
13432  for (tp = soap->attributes; tp; tp = tp->next)
13433  {
13434  if (tp->visible)
13435  {
13436  *att = (struct soap_dom_attribute*)soap_malloc(soap, sizeof(struct soap_dom_attribute));
13437  if (!*att)
13438  return soap->error;
13439  (*att)->next = NULL;
13440  (*att)->nstr = NULL;
13441  (*att)->name = soap_strdup(soap, tp->name);
13442  (*att)->text = soap_strdup(soap, tp->value);
13443  (*att)->soap = soap;
13444  if (!(*att)->name || (tp->value && !(*att)->text))
13445  return soap->error = SOAP_EOM;
13446  att = &(*att)->next;
13447  tp->visible = 0;
13448  }
13449  }
13450  return SOAP_OK;
13451  }
13452 #endif
13453  for (tp = soap->attributes; tp; tp = tp->next)
13454  {
13455  if (tp->visible)
13456  {
13457  if (soap_send_raw(soap, " ", 1) || soap_send(soap, tp->name))
13458  return soap->error;
13459  if (tp->visible == 2 && tp->value)
13460  {
13461  if (soap_send_raw(soap, "=\"", 2)
13462  || soap_string_out(soap, tp->value, tp->flag)
13463  || soap_send_raw(soap, "\"", 1))
13464  return soap->error;
13465  }
13466  else
13467  {
13468  if (soap_send_raw(soap, "=\"\"", 3))
13469  return soap->error;
13470  }
13471  tp->visible = 0;
13472  }
13473  }
13474  if (tag)
13475  {
13476 #ifndef WITH_LEAN
13477  if ((soap->mode & SOAP_XML_CANONICAL))
13478  {
13479  if (soap_send_raw(soap, ">", 1)
13480  || soap_element_end_out(soap, tag))
13481  return soap->error;
13482  return SOAP_OK;
13483  }
13484 #endif
13485  if (soap->nlist)
13487  soap->level--; /* decrement level just before /> */
13488  soap->body = 0;
13489  return soap_send_raw(soap, "/>", 2);
13490  }
13491  return soap_send_raw(soap, ">", 1);
13492 }
struct soap_dom_attribute * next
Definition: stdsoap2.h:2382
unsigned int level
Definition: stdsoap2.h:2012

References soap::attributes, soap_dom_element::atts, soap::body, soap::c14ninclude, DBGLOG, soap::dom, soap::error, soap::event, soap::evlev, soap_attribute::flag, soap_nlist::id, soap_nlist::index, soap_nlist::level, soap::level, soap::mode, soap_attribute::name, soap_nlist::next, soap_attribute::next, soap_dom_attribute::next, soap::nlist, soap_nlist::ns, NULL, soap, soap_element_end_out(), SOAP_EOM, soap_malloc(), SOAP_OK, soap_pop_namespace(), soap_push_ns(), SOAP_SEC_BEGIN, soap_send(), soap_send_raw(), soap_set_attr(), SOAP_SNPRINTF, soap_strcpy, soap_strdup(), soap_string_out(), soap_tagsearch(), soap_utilize_ns(), SOAP_XML_CANONICAL, SOAP_XML_DOM, TEST(), soap::tmpbuf, soap_attribute::value, and soap_attribute::visible.

Referenced by soap_array_begin_out(), soap_element_begin_out(), soap_element_empty(), soap_element_href(), soap_element_nil(), soap_element_null(), and soap_element_result().

◆ soap_elt()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_elt ( struct soap_dom_element elt,
const char *  ns,
const char *  tag 
)

◆ soap_elt_bool()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_elt_bool ( struct soap_dom_element elt,
LONG64  b 
)

◆ soap_elt_copy()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_elt_copy ( struct soap_dom_element elt,
const struct soap_dom_element node 
)

◆ soap_elt_depth()

SOAP_FMAC1 size_t SOAP_FMAC2 soap_elt_depth ( const struct soap_dom_element elt)

◆ soap_elt_double()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_elt_double ( struct soap_dom_element elt,
double  x 
)

◆ soap_elt_find()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_elt_find ( struct soap_dom_element elt,
const char *  ns,
const char *  patt 
)

◆ soap_elt_find_next()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_elt_find_next ( const struct soap_dom_element elt,
const char *  ns,
const char *  patt 
)

◆ soap_elt_find_next_type()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_elt_find_next_type ( const struct soap_dom_element elt,
const char *  ns,
const char *  patt,
int  type 
)

◆ soap_elt_find_type()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_elt_find_type ( struct soap_dom_element elt,
const char *  ns,
const char *  patt,
int  type 
)

◆ soap_elt_first()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_elt_first ( struct soap_dom_element elt)

◆ soap_elt_get()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_elt_get ( const struct soap_dom_element elt,
const char *  ns,
const char *  tag 
)

◆ soap_elt_get_double()

SOAP_FMAC1 double SOAP_FMAC2 soap_elt_get_double ( const struct soap_dom_element elt)

◆ soap_elt_get_int()

SOAP_FMAC1 int SOAP_FMAC2 soap_elt_get_int ( const struct soap_dom_element elt)

◆ soap_elt_get_long()

SOAP_FMAC1 long SOAP_FMAC2 soap_elt_get_long ( const struct soap_dom_element elt)

◆ soap_elt_get_LONG64()

SOAP_FMAC1 LONG64 SOAP_FMAC2 soap_elt_get_LONG64 ( const struct soap_dom_element elt)

◆ soap_elt_get_next()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_elt_get_next ( const struct soap_dom_element elt)

◆ soap_elt_get_node()

SOAP_FMAC1 const void* SOAP_FMAC2 soap_elt_get_node ( const struct soap_dom_element elt,
int  type 
)

◆ soap_elt_get_ns()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_elt_get_ns ( const struct soap_dom_element elt)

◆ soap_elt_get_nth()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_elt_get_nth ( struct soap_dom_element elt,
size_t  n 
)

◆ soap_elt_get_tag()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_elt_get_tag ( const struct soap_dom_element elt)

◆ soap_elt_get_text()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_elt_get_text ( const struct soap_dom_element elt)

◆ soap_elt_get_type()

SOAP_FMAC1 int SOAP_FMAC2 soap_elt_get_type ( const struct soap_dom_element elt,
const void **  node 
)

◆ soap_elt_get_w()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_elt_get_w ( const struct soap_dom_element elt,
const char *  ns,
const wchar_t *  tag 
)

◆ soap_elt_index()

SOAP_FMAC1 size_t SOAP_FMAC2 soap_elt_index ( const struct soap_dom_element elt)

◆ soap_elt_int()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_elt_int ( struct soap_dom_element elt,
LONG64  n 
)

◆ soap_elt_is_false()

SOAP_FMAC1 int SOAP_FMAC2 soap_elt_is_false ( const struct soap_dom_element elt)

◆ soap_elt_is_true()

SOAP_FMAC1 int SOAP_FMAC2 soap_elt_is_true ( const struct soap_dom_element elt)

◆ soap_elt_len()

SOAP_FMAC1 size_t SOAP_FMAC2 soap_elt_len ( const struct soap_dom_element elt)

◆ soap_elt_match()

SOAP_FMAC1 int SOAP_FMAC2 soap_elt_match ( const struct soap_dom_element elt,
const char *  ns,
const char *  patt 
)

◆ soap_elt_match_w()

SOAP_FMAC1 int SOAP_FMAC2 soap_elt_match_w ( const struct soap_dom_element elt,
const char *  ns,
const wchar_t *  patt 
)

◆ soap_elt_new()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_elt_new ( struct soap soap,
const char *  ns,
const char *  tag 
)

◆ soap_elt_new_w()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_elt_new_w ( struct soap soap,
const char *  ns,
const wchar_t *  tag 
)

◆ soap_elt_next()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_elt_next ( const struct soap_dom_element elt)

◆ soap_elt_node()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_elt_node ( struct soap_dom_element elt,
const void *  node,
int  type 
)

◆ soap_elt_nth()

SOAP_FMAC1 size_t SOAP_FMAC2 soap_elt_nth ( const struct soap_dom_element elt)

◆ soap_elt_parent()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_elt_parent ( const struct soap_dom_element elt)

◆ soap_elt_set()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_elt_set ( struct soap_dom_element elt,
const char *  ns,
const char *  tag 
)

◆ soap_elt_set_w()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_elt_set_w ( struct soap_dom_element elt,
const char *  ns,
const wchar_t *  tag 
)

◆ soap_elt_size()

SOAP_FMAC1 size_t SOAP_FMAC2 soap_elt_size ( struct soap_dom_element elt,
const char *  ns,
const char *  patt 
)

◆ soap_elt_size_type()

SOAP_FMAC1 size_t SOAP_FMAC2 soap_elt_size_type ( struct soap_dom_element elt,
const char *  ns,
const char *  patt,
int  type 
)

◆ soap_elt_text()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_elt_text ( struct soap_dom_element elt,
const char *  text 
)

◆ soap_elt_text_w()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_elt_text_w ( struct soap_dom_element elt,
const wchar_t *  text 
)

◆ soap_elt_w()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_elt_w ( struct soap_dom_element elt,
const char *  ns,
const wchar_t *  tag 
)

◆ soap_embed()

SOAP_FMAC1 int SOAP_FMAC2 soap_embed ( struct soap soap,
const void *  p,
const void *  a,
int  n,
int  t 
)

Definition at line 9627 of file stdsoap2.cpp.

9628 {
9629  int id;
9630  struct soap_plist *pp;
9631  if (soap->version == 2)
9632  soap->encoding = 1;
9633  if (!p || (!soap->encodingStyle && !(soap->mode & SOAP_XML_GRAPH)) || (soap->mode & SOAP_XML_TREE))
9634  return 0;
9635  if (a)
9636  id = soap_array_pointer_lookup(soap, p, a, n, t, &pp);
9637  else
9638  id = soap_pointer_lookup(soap, p, t, &pp);
9639  if (id)
9640  {
9641  if (soap_is_embedded(soap, pp) || soap_is_single(soap, pp))
9642  return 0;
9643  soap_set_embedded(soap, pp);
9644  }
9645  return id;
9646 }

References mpq::a, soap::encoding, soap::encodingStyle, soap_plist::id, soap::mode, soap_array_pointer_lookup(), soap_is_embedded(), soap_is_single(), soap_pointer_lookup(), soap_set_embedded(), SOAP_XML_GRAPH, SOAP_XML_TREE, and soap::version.

Referenced by soap_element_id(), and soap_embedded_id().

◆ soap_embedded()

SOAP_FMAC1 void SOAP_FMAC2 soap_embedded ( struct soap soap,
const void *  p,
int  t 
)

Definition at line 10013 of file stdsoap2.cpp.

10014 {
10015  struct soap_plist *pp;
10016  if (soap_pointer_lookup(soap, p, t, &pp))
10017  {
10018  pp->mark1 = 1;
10019  pp->mark2 = 1;
10020  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Embedded %p type=%d mark set to 1\n", p, t));
10021  }
10022 }

References DBGLOG, soap_plist::mark1, soap_plist::mark2, soap_pointer_lookup(), and TEST().

◆ soap_embedded_id()

SOAP_FMAC1 int SOAP_FMAC2 soap_embedded_id ( struct soap soap,
int  id,
const void *  p,
int  t 
)

Definition at line 10117 of file stdsoap2.cpp.

10118 {
10119  struct soap_plist *pp = NULL;
10120  if (id >= 0 || (!soap->encodingStyle && !(soap->omode & SOAP_XML_GRAPH)) || (soap->omode & SOAP_XML_TREE))
10121  return id;
10122  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Embedded_id %p type=%d id=%d\n", p, t, id));
10123  if (id < -1)
10124  return soap_embed(soap, p, NULL, 0, t);
10125  if (id < 0)
10126  {
10127  id = soap_pointer_lookup(soap, p, t, &pp);
10128  if (soap->version == 1 && soap->part != SOAP_IN_HEADER)
10129  {
10130  if (id)
10131  {
10132  if ((soap->mode & SOAP_IO_LENGTH))
10133  pp->mark1 = 2;
10134  else
10135  pp->mark2 = 2;
10136  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Embedded_id multiref id=%d %p type=%d = (%d %d)\n", id, p, t, (int)pp->mark1, (int)pp->mark2));
10137  }
10138  return -1;
10139  }
10140  else if (id)
10141  {
10142  if ((soap->mode & SOAP_IO_LENGTH))
10143  pp->mark1 = 1;
10144  else
10145  pp->mark2 = 1;
10146  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Embedded_id embedded ref id=%d %p type=%d = (%d %d)\n", id, p, t, (int)pp->mark1, (int)pp->mark2));
10147  }
10148  }
10149  return id;
10150 }
#define SOAP_IN_HEADER
Definition: stdsoap2.h:1780

References DBGLOG, soap::encodingStyle, soap_plist::id, soap_plist::mark1, soap_plist::mark2, soap::mode, NULL, soap::omode, soap::part, soap_embed(), SOAP_IN_HEADER, SOAP_IO_LENGTH, soap_pointer_lookup(), SOAP_XML_GRAPH, SOAP_XML_TREE, TEST(), and soap::version.

Referenced by soap_out_ns1__executeCommand(), soap_out_ns1__executeCommandResponse(), soap_out_SOAP_ENV__Code(), soap_out_SOAP_ENV__Detail(), soap_out_SOAP_ENV__Fault(), soap_out_SOAP_ENV__Header(), soap_out_SOAP_ENV__Reason(), soap_outbyte(), soap_outdateTime(), soap_outdouble(), soap_outfloat(), soap_outint(), soap_outlong(), soap_outLONG64(), soap_outshort(), soap_outULONG64(), soap_outunsignedByte(), soap_outunsignedInt(), soap_outunsignedLong(), and soap_outunsignedShort().

◆ soap_encode_url()

SOAP_FMAC1 int SOAP_FMAC2 soap_encode_url ( const char *  s,
char *  t,
int  len 
)

Definition at line 8513 of file stdsoap2.cpp.

8514 {
8515  int c;
8516  int n = len;
8517  if (s && n > 0)
8518  {
8519  while ((c = *s++) && --n > 0)
8520  {
8521  if (c == '-'
8522  || c == '.'
8523  || (c >= '0' && c <= '9')
8524  || (c >= 'A' && c <= 'Z')
8525  || c == '_'
8526  || (c >= 'a' && c <= 'z')
8527  || c == '~')
8528  {
8529  *t++ = c;
8530  }
8531  else if (n > 2)
8532  {
8533  *t++ = '%';
8534  *t++ = (c >> 4) + (c > 159 ? '7' : '0');
8535  c &= 0xF;
8536  *t++ = c + (c > 9 ? '7' : '0');
8537  n -= 2;
8538  }
8539  else
8540  {
8541  break;
8542  }
8543  }
8544  *t = '\0';
8545  }
8546  return len - n;
8547 }

References mpq::c.

Referenced by soap_encode_url_string(), soap_query_send_key(), soap_query_send_val(), and soap_url_query().

◆ soap_encode_url_string()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_encode_url_string ( struct soap soap,
const char *  s 
)

Definition at line 8554 of file stdsoap2.cpp.

8555 {
8556  if (s)
8557  {
8558  int n = 3 * (int)strlen(s) + 1;
8559  char *t = (char*)soap_malloc(soap, n);
8560  if (t)
8561  {
8562  (void)soap_encode_url(s, t, n);
8563  return t;
8564  }
8565  }
8566  return SOAP_STR_EOS;
8567 }
SOAP_FMAC1 int SOAP_FMAC2 soap_encode_url(const char *s, char *t, int len)
Definition: stdsoap2.cpp:8513

References soap_encode_url(), soap_malloc(), and SOAP_STR_EOS.

◆ soap_end()

SOAP_FMAC1 void SOAP_FMAC2 soap_end ( struct soap soap)

Definition at line 12427 of file stdsoap2.cpp.

12428 {
12429  if (soap_check_state(soap))
12430  return;
12433  while (soap->clist)
12434  {
12435  struct soap_clist *cp = soap->clist->next;
12436  SOAP_FREE(soap, soap->clist);
12437  soap->clist = cp;
12438  }
12440 #ifdef SOAP_DEBUG
12442 #endif
12443 }
SOAP_FMAC1 void SOAP_FMAC2 soap_dealloc(struct soap *soap, void *p)
Definition: stdsoap2.cpp:10560
SOAP_FMAC1 void SOAP_FMAC2 soap_close_logfiles(struct soap *)

References soap::clist, soap_clist::next, NULL, soap_check_state, soap_close_logfiles(), soap_closesock(), soap_dealloc(), SOAP_FREE, and soap_free_temp().

Referenced by ACSoapThread(), process_message(), soap_copy_context(), and soap_serve().

◆ soap_end_block()

SOAP_FMAC1 void SOAP_FMAC2 soap_end_block ( struct soap soap,
struct soap_blist b 
)

Definition at line 3295 of file stdsoap2.cpp.

3296 {
3297  struct soap_bhead *p, *q;
3298  if (!b)
3299  b = soap->blist;
3300  if (b)
3301  {
3302  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of block sequence, free all remaining blocks\n"));
3303  for (p = b->head; p; p = q)
3304  {
3305  q = p->next;
3306  SOAP_FREE(soap, p);
3307  }
3308  if (soap->blist == b)
3309  soap->blist = b->next;
3310  else
3311  {
3312  struct soap_blist *bp;
3313  for (bp = soap->blist; bp; bp = bp->next)
3314  {
3315  if (bp->next == b)
3316  {
3317  bp->next = b->next;
3318  break;
3319  }
3320  }
3321  }
3322  SOAP_FREE(soap, b);
3323  }
3324  DBGLOG(TEST, if (soap->blist) SOAP_MESSAGE(fdebug, "Restored previous block sequence\n"));
3325 #ifndef WITH_NOIDREF
3326  if (!soap->blist && ((soap->version && !(soap->imode & SOAP_XML_TREE)) || (soap->mode & SOAP_XML_GRAPH)))
3327  {
3328  int i;
3329  struct soap_ilist *ip = NULL;
3330  for (i = 0; i < SOAP_IDHASH; i++)
3331  for (ip = soap->iht[i]; ip; ip = ip->next)
3332  ip->shaky = 0;
3333  }
3334 #endif
3335 }
#define SOAP_IDHASH
Definition: stdsoap2.h:1190
struct soap_bhead * next
Definition: stdsoap2.h:2021
struct soap_ilist * next
Definition: stdsoap2.h:3014
short shaky
Definition: stdsoap2.h:3023
struct soap_ilist * iht[SOAP_IDHASH]
Definition: stdsoap2.h:2710

References b, soap::blist, DBGLOG, soap::iht, soap::imode, soap::mode, soap_bhead::next, soap_blist::next, soap_ilist::next, NULL, soap_ilist::shaky, SOAP_FREE, SOAP_IDHASH, SOAP_XML_GRAPH, SOAP_XML_TREE, TEST(), and soap::version.

Referenced by soap_end_send_flush(), soap_free_temp(), soap_gethex(), and soap_save_block().

◆ soap_end_count()

SOAP_FMAC1 int SOAP_FMAC2 soap_end_count ( struct soap soap)

Definition at line 9824 of file stdsoap2.cpp.

9825 {
9826  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of count phase\n"));
9827 #ifndef WITH_LEANER
9828  if ((soap->mode & SOAP_IO_LENGTH))
9829  {
9831  return soap->error;
9833  return soap->error;
9834  }
9835 #else
9836  (void)soap;
9837 #endif
9838  return SOAP_OK;
9839 }
static int soap_end_attachments(struct soap *soap)
Definition: stdsoap2.cpp:20182

References DBGLOG, soap::error, soap::fpreparefinalsend, soap::mode, soap_end_attachments(), SOAP_IO_LENGTH, SOAP_OK, and TEST().

Referenced by soap_send_fault(), and soap_serve_ns1__executeCommand().

◆ soap_end_recv()

SOAP_FMAC1 int SOAP_FMAC2 soap_end_recv ( struct soap soap)

Definition at line 11393 of file stdsoap2.cpp.

11394 {
11395  soap->part = SOAP_END;
11396 #ifndef WITH_LEAN
11397  soap->wsuid = NULL; /* reset before next send */
11398  soap->c14nexclude = NULL; /* reset before next send */
11399  soap->c14ninclude = NULL; /* reset before next send */
11400 #endif
11401 #ifndef WITH_LEANER
11402  soap->ffilterrecv = NULL;
11403  if ((soap->mode & SOAP_ENC_DIME) && soap_getdime(soap))
11404  {
11405  soap->dime.first = NULL;
11406  soap->dime.last = NULL;
11407  return soap->error;
11408  }
11409  soap->dime.list = soap->dime.first;
11410  soap->dime.first = NULL;
11411  soap->dime.last = NULL;
11412  /* Check if MIME attachments and mime-post-check flag is set, if so call soap_resolve() and return */
11413  if ((soap->mode & SOAP_ENC_MIME))
11414  {
11415  if ((soap->mode & SOAP_MIME_POSTCHECK))
11416  {
11417  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Post checking MIME attachments\n"));
11418  if (!soap->keep_alive)
11419  soap->keep_alive = -2; /* special case to keep alive */
11420 #ifndef WITH_NOIDREF
11421  soap_resolve(soap);
11422 #endif
11423  return SOAP_OK;
11424  }
11425  if (soap_getmime(soap))
11426  return soap->error;
11427  }
11428  soap->mime.list = soap->mime.first;
11429  soap->mime.first = NULL;
11430  soap->mime.last = NULL;
11431  soap->mime.boundary = NULL;
11432  if (soap->xlist)
11433  {
11434  struct soap_multipart *content;
11435  for (content = soap->mime.list; content; content = content->next)
11436  soap_resolve_attachment(soap, content);
11437  }
11438 #endif
11439  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of receive message ok\n"));
11440 #ifdef WITH_ZLIB
11441  if ((soap->mode & SOAP_ENC_ZLIB) && soap->d_stream)
11442  {
11443  /* Make sure end of compressed content is reached */
11444  while (soap->d_stream->next_out != Z_NULL)
11445  if ((int)soap_get1(soap) == EOF)
11446  break;
11447  soap->mode &= ~SOAP_ENC_ZLIB;
11448  (void)soap_memcpy((void*)soap->buf, sizeof(soap->buf), (const void*)soap->z_buf, sizeof(soap->buf));
11449  soap->bufidx = (char*)soap->d_stream->next_in - soap->z_buf;
11450  soap->buflen = soap->z_buflen;
11452  if (inflateEnd(soap->d_stream) != Z_OK)
11453  return soap->error = SOAP_ZLIB_ERROR;
11454  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflate end ok\n"));
11455 #ifdef WITH_GZIP
11456  if (soap->zlib_in == SOAP_ZLIB_GZIP)
11457  {
11458  soap_wchar c;
11459  short i;
11460  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflate gzip crc check\n"));
11461  for (i = 0; i < 8; i++)
11462  {
11463  if ((int)(c = soap_get1(soap)) == EOF)
11464  {
11465  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Gzip error: unable to read crc value\n"));
11466  return soap->error = SOAP_ZLIB_ERROR;
11467  }
11468  soap->z_buf[i] = (char)c;
11469  }
11470  if (soap->z_crc != ((uLong)(unsigned char)soap->z_buf[0] | ((uLong)(unsigned char)soap->z_buf[1] << 8) | ((uLong)(unsigned char)soap->z_buf[2] << 16) | ((uLong)(unsigned char)soap->z_buf[3] << 24)))
11471  {
11472  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Gzip inflate error: crc check failed, message corrupted? (crc32=%lu)\n", (unsigned long)soap->z_crc));
11473  return soap->error = SOAP_ZLIB_ERROR;
11474  }
11475  if (soap->d_stream->total_out != ((uLong)(unsigned char)soap->z_buf[4] | ((uLong)(unsigned char)soap->z_buf[5] << 8) | ((uLong)(unsigned char)soap->z_buf[6] << 16) | ((uLong)(unsigned char)soap->z_buf[7] << 24)))
11476  {
11477  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Gzip inflate error: incorrect message length\n"));
11478  return soap->error = SOAP_ZLIB_ERROR;
11479  }
11480  }
11482 #endif
11483  }
11484 #endif
11485  if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK)
11486  while ((int)soap->ahead != EOF && !soap_recv_raw(soap))
11487  continue;
11488 #ifndef WITH_NOIDREF
11489  if (soap_resolve(soap))
11490  return soap->error;
11491 #endif
11492 #ifndef WITH_LEANER
11493  if (soap->xlist)
11494  {
11495  if ((soap->mode & SOAP_ENC_MTOM))
11496  return soap->error = SOAP_MIME_HREF;
11497  return soap->error = SOAP_DIME_HREF;
11498  }
11499 #endif
11500  soap_free_ns(soap);
11501 #ifndef WITH_LEANER
11502  if (soap->fpreparefinalrecv)
11503  return soap->error = soap->fpreparefinalrecv(soap);
11504 #endif
11505  return SOAP_OK;
11506 }
SOAP_FMAC1 int SOAP_FMAC2 soap_getmime(struct soap *soap)
Definition: stdsoap2.cpp:19660
SOAP_FMAC1 int SOAP_FMAC2 soap_resolve(struct soap *soap)
Definition: stdsoap2.cpp:3089
static void soap_resolve_attachment(struct soap *, struct soap_multipart *)
Definition: stdsoap2.cpp:19937
SOAP_FMAC1 int SOAP_FMAC2 soap_getdime(struct soap *soap)
Definition: stdsoap2.cpp:19439
SOAP_FMAC1 int SOAP_FMAC2 soap_recv_raw(struct soap *soap)
Definition: stdsoap2.cpp:1353
struct soap_multipart * next
Definition: stdsoap2.h:2193
const char * c14nexclude
Definition: stdsoap2.h:2890
unsigned long uLong
Definition: zconf.h:368

References soap::ahead, soap_mime::boundary, soap::buf, soap::bufidx, soap::buflen, mpq::c, soap::c14nexclude, soap::c14ninclude, soap::d_stream, DBGLOG, soap::dime, soap::error, soap::ffilterrecv, soap_dime::first, soap_mime::first, soap::fpreparefinalrecv, if(), inflateEnd(), soap::keep_alive, soap_dime::last, soap_mime::last, soap_dime::list, soap_mime::list, soap::mime, soap::mode, soap_multipart::next, NULL, soap::part, SOAP_DIME_HREF, SOAP_ENC_DIME, SOAP_ENC_MIME, SOAP_ENC_MTOM, SOAP_ENC_ZLIB, SOAP_END, soap_free_ns(), soap_get1, soap_getdime(), soap_getmime(), SOAP_IO, SOAP_IO_CHUNK, soap_memcpy, SOAP_MIME_HREF, SOAP_MIME_POSTCHECK, SOAP_OK, soap_recv_raw(), soap_resolve(), soap_resolve_attachment(), SOAP_ZLIB_ERROR, SOAP_ZLIB_GZIP, SOAP_ZLIB_NONE, TEST(), soap::wsuid, soap::xlist, soap::z_buf, soap::z_buflen, soap::z_crc, Z_NULL, Z_OK, soap::zlib_in, and soap::zlib_state.

Referenced by soap_begin_recv(), soap_read__QName(), soap_read_byte(), soap_read_int(), soap_read_ns1__executeCommand(), soap_read_ns1__executeCommandResponse(), soap_read_SOAP_ENV__Code(), soap_read_SOAP_ENV__Detail(), soap_read_SOAP_ENV__Fault(), soap_read_SOAP_ENV__Header(), soap_read_SOAP_ENV__Reason(), soap_read_string(), soap_recv_empty_response(), soap_recv_fault(), soap_recv_mime_attachment(), and soap_serve_ns1__executeCommand().

◆ soap_end_send()

SOAP_FMAC1 int SOAP_FMAC2 soap_end_send ( struct soap soap)

Definition at line 11209 of file stdsoap2.cpp.

11210 {
11211 #ifndef WITH_LEANER
11212  int err;
11213  err = soap_end_attachments(soap);
11214  if (soap->dime.list)
11215  {
11216  /* SOAP body referenced attachments must appear first */
11217  soap->dime.last->next = soap->dime.first;
11218  soap->dime.first = soap->dime.list->next;
11219  soap->dime.list->next = NULL;
11220  soap->dime.last = soap->dime.list;
11221  }
11222  if (!err)
11223  err = soap_putdime(soap);
11224  if (!err)
11225  err = soap_putmime(soap);
11226  soap->mime.list = NULL;
11227  soap->mime.first = NULL;
11228  soap->mime.last = NULL;
11229  soap->dime.list = NULL;
11230  soap->dime.first = NULL;
11231  soap->dime.last = NULL;
11232  if (err)
11233  return err;
11234 #endif
11235  return soap_end_send_flush(soap);
11236 }
SOAP_FMAC1 int SOAP_FMAC2 soap_end_send_flush(struct soap *soap)
Definition: stdsoap2.cpp:11243
SOAP_FMAC1 int SOAP_FMAC2 soap_putmime(struct soap *soap)
Definition: stdsoap2.cpp:20001
SOAP_FMAC1 int SOAP_FMAC2 soap_putdime(struct soap *soap)
Definition: stdsoap2.cpp:19249

References soap::dime, soap_dime::first, soap_mime::first, soap_dime::last, soap_mime::last, soap_dime::list, soap_mime::list, soap::mime, soap_multipart::next, NULL, soap_end_attachments(), soap_end_send_flush(), soap_putdime(), and soap_putmime().

Referenced by soap_PATCH__QName(), soap_PATCH_byte(), soap_PATCH_int(), soap_PATCH_ns1__executeCommand(), soap_PATCH_ns1__executeCommandResponse(), soap_PATCH_SOAP_ENV__Code(), soap_PATCH_SOAP_ENV__Detail(), soap_PATCH_SOAP_ENV__Fault(), soap_PATCH_SOAP_ENV__Header(), soap_PATCH_SOAP_ENV__Reason(), soap_PATCH_string(), soap_POST_send__QName(), soap_POST_send_byte(), soap_POST_send_int(), soap_POST_send_ns1__executeCommand(), soap_POST_send_ns1__executeCommandResponse(), soap_POST_send_SOAP_ENV__Code(), soap_POST_send_SOAP_ENV__Detail(), soap_POST_send_SOAP_ENV__Fault(), soap_POST_send_SOAP_ENV__Header(), soap_POST_send_SOAP_ENV__Reason(), soap_POST_send_string(), soap_PUT__QName(), soap_PUT_byte(), soap_PUT_int(), soap_PUT_ns1__executeCommand(), soap_PUT_ns1__executeCommandResponse(), soap_PUT_SOAP_ENV__Code(), soap_PUT_SOAP_ENV__Detail(), soap_PUT_SOAP_ENV__Fault(), soap_PUT_SOAP_ENV__Header(), soap_PUT_SOAP_ENV__Reason(), soap_PUT_string(), soap_send_empty_response(), soap_send_fault(), soap_serve_ns1__executeCommand(), soap_write__QName(), soap_write_byte(), soap_write_int(), soap_write_ns1__executeCommand(), soap_write_ns1__executeCommandResponse(), soap_write_SOAP_ENV__Code(), soap_write_SOAP_ENV__Detail(), soap_write_SOAP_ENV__Fault(), soap_write_SOAP_ENV__Header(), soap_write_SOAP_ENV__Reason(), and soap_write_string().

◆ soap_end_send_flush()

SOAP_FMAC1 int SOAP_FMAC2 soap_end_send_flush ( struct soap soap)

Definition at line 11243 of file stdsoap2.cpp.

11244 {
11245  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End send mode=0x%x\n", soap->mode));
11246  if ((soap->mode & SOAP_IO)) /* need to flush the remaining data in buffer */
11247  {
11248  if (soap_flush(soap))
11249 #ifdef WITH_ZLIB
11250  {
11252  {
11255  }
11256  return soap->error;
11257  }
11258 #else
11259  return soap->error;
11260 #endif
11261 #ifdef WITH_ZLIB
11262  if ((soap->mode & SOAP_ENC_ZLIB) && soap->d_stream)
11263  {
11264  int r;
11265  soap->d_stream->avail_in = 0;
11266  do
11267  {
11268  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Deflating remainder\n"));
11269  r = deflate(soap->d_stream, Z_FINISH);
11270  if (soap->d_stream->avail_out != sizeof(soap->buf))
11271  {
11272  if (soap_flush_raw(soap, soap->z_buf, sizeof(soap->buf) - soap->d_stream->avail_out))
11273  {
11276  return soap->error;
11277  }
11278  soap->d_stream->next_out = (Byte*)soap->z_buf;
11279  soap->d_stream->avail_out = sizeof(soap->buf);
11280  }
11281  } while (r == Z_OK);
11282  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Deflated total %lu->%lu bytes\n", soap->d_stream->total_in, soap->d_stream->total_out));
11283  soap->z_ratio_out = (float)soap->d_stream->total_out / (float)soap->d_stream->total_in;
11284  soap->mode &= ~SOAP_ENC_ZLIB;
11286  if (deflateEnd(soap->d_stream) != Z_OK || r != Z_STREAM_END)
11287  {
11288  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unable to end deflate: %s\n", soap->d_stream->msg ? soap->d_stream->msg : SOAP_STR_EOS));
11289  return soap->error = SOAP_ZLIB_ERROR;
11290  }
11291 #ifdef WITH_GZIP
11293  {
11294  soap->z_buf[0] = soap->z_crc & 0xFF;
11295  soap->z_buf[1] = (soap->z_crc >> 8) & 0xFF;
11296  soap->z_buf[2] = (soap->z_crc >> 16) & 0xFF;
11297  soap->z_buf[3] = (soap->z_crc >> 24) & 0xFF;
11298  soap->z_buf[4] = soap->d_stream->total_in & 0xFF;
11299  soap->z_buf[5] = (soap->d_stream->total_in >> 8) & 0xFF;
11300  soap->z_buf[6] = (soap->d_stream->total_in >> 16) & 0xFF;
11301  soap->z_buf[7] = (soap->d_stream->total_in >> 24) & 0xFF;
11302  if (soap_flush_raw(soap, soap->z_buf, 8))
11303  return soap->error;
11304  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "gzip crc32=%lu\n", (unsigned long)soap->z_crc));
11305  }
11306 #endif
11307  }
11308 #endif
11309  if ((soap->mode & SOAP_IO) == SOAP_IO_STORE)
11310  {
11311 #if !defined(__cplusplus) || defined(WITH_COMPAT)
11312  if (soap->os)
11313  {
11314  char *b = (char*)soap_push_block(soap, NULL, 1);
11315  if (b)
11316  {
11317  *b = '\0';
11318  *soap->os = soap_save_block(soap, NULL, NULL, 0);
11319  }
11320  }
11321  else
11322 #endif
11323  {
11324  char *p;
11325 #ifndef WITH_NOHTTP
11326  if (!(soap->mode & SOAP_ENC_PLAIN))
11327  {
11328  soap->mode--;
11329  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Sending buffered message of length %u\n", (unsigned int)soap->blist->size));
11330  if (soap->status >= SOAP_POST)
11332  else if (soap->status != SOAP_STOP)
11334  if (soap->error || soap_flush(soap))
11335  return soap->error;
11336  soap->mode++;
11337  }
11338 #endif
11339  for (p = soap_first_block(soap, NULL); p; p = soap_next_block(soap, NULL))
11340  {
11341  DBGMSG(SENT, p, soap_block_size(soap, NULL));
11342  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Send %u bytes to socket=%d/fd=%d\n", (unsigned int)soap_block_size(soap, NULL), (int)soap->socket, soap->sendfd));
11344  if (soap->error)
11345  {
11347  return soap->error;
11348  }
11349  }
11351  }
11352 #ifndef WITH_LEANER
11354  return soap->error;
11355 #endif
11356  if ((soap->omode & SOAP_IO) == SOAP_IO_STORE && (soap->imode & SOAP_IO) != SOAP_IO_STORE)
11357  soap->omode = (soap->omode & ~SOAP_IO) | (soap->imode & SOAP_IO);
11358  }
11359 #ifndef WITH_LEANER
11360  else if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK)
11361  {
11362  DBGMSG(SENT, "\r\n0\r\n\r\n", 7);
11363  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Send 7 bytes to socket=%d/fd=%d\n", (int)soap->socket, soap->sendfd));
11364  soap->error = soap->fsend(soap, "\r\n0\r\n\r\n", 7);
11365  if (soap->error)
11366  return soap->error;
11367  }
11368 #endif
11369  }
11370 #ifdef WITH_TCPFIN
11371 #if defined(WITH_OPENSSL) || defined(WITH_SYSTEMSSL)
11372  if (!soap->ssl)
11373 #endif
11375  soap->fshutdownsocket(soap, soap->socket, SOAP_SHUT_WR); /* Send TCP FIN */
11376 #endif
11377 #if defined(__cplusplus) && !defined(WITH_COMPAT)
11378  if (soap->os)
11379  soap->os->flush();
11380 #endif
11381  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of send phase\n"));
11382  soap->omode &= ~SOAP_SEC_WSUID;
11383  soap->count = 0;
11384  soap->part = SOAP_END;
11385  return SOAP_OK;
11386 }
int ZEXPORT deflate(z_streamp strm, int flush)
Definition: deflate.c:663
SOAP_FMAC1 size_t SOAP_FMAC2 soap_block_size(struct soap *soap, struct soap_blist *b)
Definition: stdsoap2.cpp:3283
SOAP_FMAC1 int SOAP_FMAC2 soap_flush_raw(struct soap *soap, const char *s, size_t n)
Definition: stdsoap2.cpp:916
SOAP_FMAC1 int SOAP_FMAC2 soap_flush(struct soap *soap)
Definition: stdsoap2.cpp:867
SOAP_FMAC1 void *SOAP_FMAC2 soap_push_block(struct soap *soap, struct soap_blist *b, size_t n)
Definition: stdsoap2.cpp:2910
SOAP_FMAC1 void SOAP_FMAC2 soap_end_block(struct soap *soap, struct soap_blist *b)
Definition: stdsoap2.cpp:3295
SOAP_FMAC1 char *SOAP_FMAC2 soap_save_block(struct soap *soap, struct soap_blist *b, char *p, int flag)
Definition: stdsoap2.cpp:3342
SOAP_FMAC1 char *SOAP_FMAC2 soap_next_block(struct soap *soap, struct soap_blist *b)
Definition: stdsoap2.cpp:3261
SOAP_FMAC1 char *SOAP_FMAC2 soap_first_block(struct soap *soap, struct soap_blist *b)
Definition: stdsoap2.cpp:3235
#define SOAP_SHUT_WR
Definition: stdsoap2.h:998
#define DBGMSG(DBGFILE, MSG, LEN)
Definition: stdsoap2.h:1984
char path[SOAP_TAGLEN]
Definition: stdsoap2.h:2846
#define Z_STREAM_END
Definition: zlib.h:174
#define Z_FINISH
Definition: zlib.h:168

References soap::action, b, soap::blist, soap::buf, soap::count, soap::d_stream, DBGLOG, DBGMSG, deflate(), deflateEnd(), soap::endpoint, soap::error, soap::fpost, soap::fpreparefinalsend, soap::fresponse, soap::fsend, soap::fshutdownsocket, soap::host, soap::imode, soap::keep_alive, soap::mode, NULL, soap::omode, soap::os, soap::part, soap::path, soap::port, soap::sendfd, soap_blist::size, soap_block_size(), SOAP_ENC_PLAIN, SOAP_ENC_ZLIB, SOAP_END, soap_end_block(), soap_first_block(), soap_flush(), soap_flush_raw(), SOAP_IO, SOAP_IO_CHUNK, SOAP_IO_STORE, SOAP_IO_UDP, soap_next_block(), SOAP_OK, SOAP_POST, soap_push_block(), soap_save_block(), SOAP_SEC_WSUID, SOAP_SHUT_WR, SOAP_STOP, SOAP_STR_EOS, soap_valid_socket, SOAP_ZLIB_DEFLATE, SOAP_ZLIB_ERROR, SOAP_ZLIB_NONE, soap::socket, soap::ssl, soap::status, TEST(), soap::z_buf, soap::z_crc, Z_FINISH, Z_OK, soap::z_ratio_out, Z_STREAM_END, soap::zlib_out, and soap::zlib_state.

Referenced by soap_end_send(), soap_try_connect_command(), and tcp_connect().

◆ soap_end_shaky()

SOAP_FMAC1 void SOAP_FMAC2 soap_end_shaky ( struct soap soap,
short  f 
)

Definition at line 10876 of file stdsoap2.cpp.

10877 {
10878  soap->shaky = f;
10879 }

References f(), and soap::shaky.

◆ soap_enter()

SOAP_FMAC1 struct soap_ilist* SOAP_FMAC2 soap_enter ( struct soap soap,
const char *  id,
int  t,
size_t  n 
)

Definition at line 10369 of file stdsoap2.cpp.

10370 {
10371  size_t h;
10372  struct soap_ilist *ip = NULL;
10373  size_t l = strlen(id);
10374  if (sizeof(struct soap_ilist) + l > l && (SOAP_MAXALLOCSIZE <= 0 || sizeof(struct soap_ilist) + l <= SOAP_MAXALLOCSIZE))
10375  ip = (struct soap_ilist*)SOAP_MALLOC(soap, sizeof(struct soap_ilist) + l);
10376  if (ip)
10377  {
10378  ip->type = t;
10379  ip->size = n;
10380  ip->ptr = NULL;
10381  ip->spine = NULL;
10382  ip->link = NULL;
10383  ip->copy = NULL;
10384  ip->flist = NULL;
10385  ip->smart = NULL;
10386  ip->shaky = 0;
10387  (void)soap_memcpy((char*)ip->id, l + 1, id, l + 1);
10388  h = soap_hash(id); /* h = (HASH(id) % SOAP_IDHASH) so soap->iht[h] is safe */
10389  ip->next = soap->iht[h];
10390  soap->iht[h] = ip;
10391  }
10392  return ip;
10393 }
SOAP_FMAC1 size_t SOAP_FMAC2 soap_hash(const char *s)
Definition: stdsoap2.cpp:9539
void * ptr
Definition: stdsoap2.h:3017
char id[1]
Definition: stdsoap2.h:3024
size_t size
Definition: stdsoap2.h:3016
struct soap_flist * flist
Definition: stdsoap2.h:3021
void * smart
Definition: stdsoap2.h:3022
void * link
Definition: stdsoap2.h:3019
void ** spine
Definition: stdsoap2.h:3018
void * copy
Definition: stdsoap2.h:3020

References soap_ilist::copy, soap_ilist::flist, soap_ilist::id, soap::iht, mpq::l, soap_ilist::link, soap_ilist::next, NULL, soap_ilist::ptr, soap_ilist::shaky, soap_ilist::size, soap_ilist::smart, soap_hash(), SOAP_MALLOC, SOAP_MAXALLOCSIZE, soap_memcpy, soap_ilist::spine, and soap_ilist::type.

Referenced by soap_id_enter(), soap_id_forward(), soap_id_lookup(), and soap_id_smart().

◆ soap_envelope_begin_in()

SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_begin_in ( struct soap soap)

Definition at line 21015 of file stdsoap2.cpp.

21016 {
21018  if (soap_element_begin_in(soap, "SOAP-ENV:Envelope", 0, NULL))
21019  {
21020  if (soap->error == SOAP_TAG_MISMATCH)
21021  {
21022  if (!soap_element_begin_in(soap, "Envelope", 0, NULL))
21024  else if (soap->status == 0
21025  || (soap->status >= 200 && soap->status <= 299)
21026  || soap->status == 400
21027  || soap->status == 500)
21028  return SOAP_OK; /* allow non-SOAP (REST) XML content to be captured */
21029  soap->error = soap->status;
21030  }
21031  else if (soap->status)
21032  {
21033  soap->error = soap->status;
21034  }
21035  return soap->error;
21036  }
21037  soap_version(soap);
21038  return SOAP_OK;
21039 }
static void soap_version(struct soap *)
Definition: stdsoap2.cpp:12476
#define SOAP_IN_ENVELOPE
Definition: stdsoap2.h:1779

References soap::error, NULL, soap::part, soap_element_begin_in(), SOAP_IN_ENVELOPE, SOAP_OK, SOAP_TAG_MISMATCH, soap_version(), SOAP_VERSIONMISMATCH, and soap::status.

Referenced by soap_begin_serve().

◆ soap_envelope_begin_out()

SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_begin_out ( struct soap soap)

Definition at line 20818 of file stdsoap2.cpp.

20819 {
20820  if (soap->version == 0)
20821  return SOAP_OK;
20823  return soap_element_begin_out(soap, "SOAP-ENV:Envelope", 0, NULL);
20824 }

References NULL, soap::part, soap_element_begin_out(), SOAP_IN_ENVELOPE, SOAP_OK, and soap::version.

Referenced by soap_send_fault(), and soap_serve_ns1__executeCommand().

◆ soap_envelope_end_in()

SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_end_in ( struct soap soap)

Definition at line 21046 of file stdsoap2.cpp.

21047 {
21048  if (soap->version == 0)
21049  return SOAP_OK;
21051  return soap_element_end_in(soap, "SOAP-ENV:Envelope");
21052 }
#define SOAP_END_ENVELOPE
Definition: stdsoap2.h:1785

References soap::part, soap_element_end_in(), SOAP_END_ENVELOPE, SOAP_OK, and soap::version.

Referenced by soap_recv_fault(), and soap_serve_ns1__executeCommand().

◆ soap_envelope_end_out()

SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_end_out ( struct soap soap)

Definition at line 20831 of file stdsoap2.cpp.

20832 {
20833  if (soap->version == 0)
20834  return SOAP_OK;
20835  if (soap_element_end_out(soap, "SOAP-ENV:Envelope")
20836  || soap_send_raw(soap, "\r\n", 2)) /* 2.8: always emit \r\n */
20837  return soap->error;
20839  return SOAP_OK;
20840 }

References soap::error, soap::part, soap_element_end_out(), SOAP_END_ENVELOPE, SOAP_OK, soap_send_raw(), and soap::version.

Referenced by soap_send_fault(), and soap_serve_ns1__executeCommand().

◆ soap_extend_url()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_extend_url ( struct soap soap,
const char *  s,
const char *  t 
)

Definition at line 8425 of file stdsoap2.cpp.

8426 {
8427  if (s)
8428  soap_strcpy(soap->msgbuf, sizeof(soap->msgbuf), s);
8429  else
8430  *soap->msgbuf = '\0';
8431  if (t && (*t == '/' || *t == '?'))
8432  {
8433  char *r = strchr(soap->msgbuf, '?');
8434  if (r)
8435  {
8436  if (*t == '?')
8437  {
8438  soap_strcat(soap->msgbuf, sizeof(soap->msgbuf), "&");
8439  soap_strcat(soap->msgbuf, sizeof(soap->msgbuf), t + 1);
8440  }
8441  else /* *t == '/' */
8442  {
8443  size_t l = r - soap->msgbuf;
8444  *r = '\0';
8445  soap_strcat(soap->msgbuf, sizeof(soap->msgbuf), t);
8446  if (s)
8447  soap_strcat(soap->msgbuf, sizeof(soap->msgbuf), s + l);
8448  }
8449  }
8450  else
8451  {
8452  soap_strcat(soap->msgbuf, sizeof(soap->msgbuf), t);
8453  }
8454  }
8455  return soap->msgbuf;
8456 }
char msgbuf[SOAP_TMPLEN]
Definition: stdsoap2.h:2820

References mpq::l, soap::msgbuf, soap_strcat(), and soap_strcpy.

Referenced by soap_extend_url_query().

◆ soap_extend_url_query()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_extend_url_query ( struct soap soap,
const char *  s,
const char *  t 
)

Definition at line 8463 of file stdsoap2.cpp.

8464 {
8465  (void)soap_extend_url(soap, s, t); /* fills and returns soap->msgbuf */
8466  if (strchr(soap->msgbuf, '?'))
8467  soap_strcat(soap->msgbuf, sizeof(soap->msgbuf), "&");
8468  else
8469  soap_strcat(soap->msgbuf, sizeof(soap->msgbuf), "?");
8470  return soap->msgbuf;
8471 }
SOAP_FMAC1 const char *SOAP_FMAC2 soap_extend_url(struct soap *soap, const char *s, const char *t)
Definition: stdsoap2.cpp:8425

References soap::msgbuf, soap_extend_url(), and soap_strcat().

◆ soap_fault()

SOAP_FMAC3 void SOAP_FMAC4 soap_fault ( struct soap soap)

Definition at line 59 of file soapC.cpp.

60 {
61  if (soap->fault == NULL)
63  if (soap->fault == NULL)
64  return;
65  }
66  if (soap->version == 2 && soap->fault->SOAP_ENV__Code == NULL)
68  if (soap->version == 2 && soap->fault->SOAP_ENV__Reason == NULL)
70 }
struct SOAP_ENV__Reason * soap_new_SOAP_ENV__Reason(struct soap *soap, int n=-1)
Definition: soapH.h:326
struct SOAP_ENV__Fault * soap_new_SOAP_ENV__Fault(struct soap *soap, int n=-1)
Definition: soapH.h:212
struct SOAP_ENV__Code * soap_new_SOAP_ENV__Code(struct soap *soap, int n=-1)
Definition: soapH.h:530
struct SOAP_ENV__Reason * SOAP_ENV__Reason
Definition: soapStub.h:176
struct SOAP_ENV__Code * SOAP_ENV__Code
Definition: soapStub.h:174

References soap::fault, NULL, SOAP_ENV__Fault::SOAP_ENV__Code, SOAP_ENV__Fault::SOAP_ENV__Reason, soap_new_SOAP_ENV__Code(), soap_new_SOAP_ENV__Fault(), soap_new_SOAP_ENV__Reason(), and soap::version.

Referenced by soap_faultcode(), soap_faultdetail(), soap_faultstring(), and soap_faultsubcode().

◆ soap_fault_detail()

SOAP_FMAC3 const char* SOAP_FMAC4 soap_fault_detail ( struct soap soap)

Definition at line 153 of file soapC.cpp.

154 {
155  const char **s = soap_faultdetail(soap);
156  return s ? *s : NULL;
157 }
SOAP_FMAC3 const char **SOAP_FMAC4 soap_faultdetail(struct soap *soap)
Definition: soapC.cpp:138

References NULL, and soap_faultdetail().

Referenced by soap_print_fault(), and soap_sprint_fault().

◆ soap_fault_string()

SOAP_FMAC3 const char* SOAP_FMAC4 soap_fault_string ( struct soap soap)

Definition at line 132 of file soapC.cpp.

133 {
134  const char **s = soap_faultstring(soap);
135  return s ? *s : NULL;
136 }
SOAP_FMAC3 const char **SOAP_FMAC4 soap_faultstring(struct soap *soap)
Definition: soapC.cpp:122

Referenced by soap_print_fault(), and soap_sprint_fault().

◆ soap_fault_subcode()

SOAP_FMAC3 const char* SOAP_FMAC4 soap_fault_subcode ( struct soap soap)

Definition at line 116 of file soapC.cpp.

117 {
118  const char **s = soap_faultsubcode(soap);
119  return s ? *s : NULL;
120 }
SOAP_FMAC3 const char **SOAP_FMAC4 soap_faultsubcode(struct soap *soap)
Definition: soapC.cpp:100

References NULL, and soap_faultsubcode().

Referenced by soap_print_fault(), and soap_sprint_fault().

◆ soap_faultcode()

SOAP_FMAC3 const char** SOAP_FMAC4 soap_faultcode ( struct soap soap)

Definition at line 90 of file soapC.cpp.

91 {
93  if (soap->fault == NULL)
94  return NULL;
95  if (soap->version == 2 && soap->fault->SOAP_ENV__Code)
96  return (const char**)(void*)&soap->fault->SOAP_ENV__Code->SOAP_ENV__Value;
97  return (const char**)(void*)&soap->fault->faultcode;
98 }
SOAP_FMAC3 void SOAP_FMAC4 soap_fault(struct soap *soap)
Definition: soapC.cpp:59
char * SOAP_ENV__Value
Definition: soapStub.h:101
char * faultcode
Definition: soapStub.h:166

References soap::fault, SOAP_ENV__Fault::faultcode, NULL, SOAP_ENV__Fault::SOAP_ENV__Code, SOAP_ENV__Code::SOAP_ENV__Value, soap_fault(), and soap::version.

Referenced by http_response(), soap_print_fault(), soap_recv_fault(), soap_set_error(), soap_set_fault(), and soap_sprint_fault().

◆ soap_faultdetail()

SOAP_FMAC3 const char** SOAP_FMAC4 soap_faultdetail ( struct soap soap)

Definition at line 138 of file soapC.cpp.

139 {
140  soap_fault(soap);
141  if (soap->fault == NULL)
142  return NULL;
143  if (soap->version == 2)
144  { if (soap->fault->SOAP_ENV__Detail == NULL)
146  return (const char**)(void*)&soap->fault->SOAP_ENV__Detail->__any;
147  }
148  if (soap->fault->detail == NULL)
150  return (const char**)(void*)&soap->fault->detail->__any;
151 }
struct SOAP_ENV__Detail * soap_new_SOAP_ENV__Detail(struct soap *soap, int n=-1)
Definition: soapH.h:424
struct SOAP_ENV__Detail * SOAP_ENV__Detail
Definition: soapStub.h:182
struct SOAP_ENV__Detail * detail
Definition: soapStub.h:172

References SOAP_ENV__Detail::__any, SOAP_ENV__Fault::detail, soap::fault, NULL, SOAP_ENV__Fault::SOAP_ENV__Detail, soap_fault(), soap_new_SOAP_ENV__Detail(), and soap::version.

Referenced by soap_fault_detail(), soap_recv_fault(), soap_send_fault(), and soap_set_error().

◆ soap_faultstring()

SOAP_FMAC3 const char** SOAP_FMAC4 soap_faultstring ( struct soap soap)

Definition at line 122 of file soapC.cpp.

123 {
124  soap_fault(soap);
125  if (soap->fault == NULL)
126  return NULL;
127  if (soap->version == 2 && soap->fault->SOAP_ENV__Reason)
128  return (const char**)(void*)&soap->fault->SOAP_ENV__Reason->SOAP_ENV__Text;
129  return (const char**)(void*)&soap->fault->faultstring;
130 }
char * faultstring
Definition: soapStub.h:168
char * SOAP_ENV__Text
Definition: soapStub.h:146

References soap::fault, SOAP_ENV__Fault::faultstring, NULL, SOAP_ENV__Fault::SOAP_ENV__Reason, SOAP_ENV__Reason::SOAP_ENV__Text, soap_fault(), and soap::version.

Referenced by soap_instantiate_SOAP_ENV__Detail(), soap_recv_fault(), soap_send_fault(), soap_set_error(), and soap_set_fault().

◆ soap_faultsubcode()

SOAP_FMAC3 const char** SOAP_FMAC4 soap_faultsubcode ( struct soap soap)

Definition at line 100 of file soapC.cpp.

101 {
102  soap_fault(soap);
103  if (soap->fault == NULL)
104  return NULL;
105  if (soap->version == 2 && soap->fault->SOAP_ENV__Code)
109  return NULL;
110  }
111  return (const char**)(void*)&soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode->SOAP_ENV__Value;
112  }
113  return (const char**)(void*)&soap->fault->faultcode;
114 }
struct SOAP_ENV__Code * SOAP_ENV__Subcode
Definition: soapStub.h:103

References soap::fault, NULL, SOAP_ENV__Fault::SOAP_ENV__Code, SOAP_ENV__Code::SOAP_ENV__Subcode, soap_fault(), soap_new_SOAP_ENV__Code(), and soap::version.

Referenced by soap_fault_subcode(), soap_set_error(), and soap_set_fault().

◆ soap_first_block()

SOAP_FMAC1 char* SOAP_FMAC2 soap_first_block ( struct soap soap,
struct soap_blist b 
)

Definition at line 3235 of file stdsoap2.cpp.

3236 {
3237  struct soap_bhead *p, *q, *r;
3238  if (!b)
3239  b = soap->blist;
3240  p = b->head;
3241  if (!p)
3242  return NULL;
3243  r = NULL;
3244  do
3245  {
3246  q = p->next;
3247  p->next = r;
3248  r = p;
3249  p = q;
3250  } while (p);
3251  b->head = r;
3252  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "First block %p\n", (void*)(r + 1)));
3253  return (char*)(r + 1);
3254 }

References b, soap::blist, DBGLOG, soap_bhead::next, NULL, and TEST().

Referenced by soap_end_send_flush(), and soap_save_block().

◆ soap_float2s()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_float2s ( struct soap soap,
float  n 
)

Definition at line 16556 of file stdsoap2.cpp.

16557 {
16558 #if defined(WITH_C_LOCALE)
16559 # if !defined(WIN32)
16560  SOAP_LOCALE_T locale;
16561 # endif
16562 #else
16563  char *s;
16564 #endif
16565  if (soap_isnan((double)n))
16566  return "NaN";
16567  if (soap_ispinff(n))
16568  return "INF";
16569  if (soap_isninff(n))
16570  return "-INF";
16571 #if defined(WITH_C_LOCALE)
16572 # ifdef WIN32
16573  _sprintf_s_l(soap->tmpbuf, _countof(soap->tmpbuf), soap->float_format, SOAP_LOCALE(soap), n);
16574 # else
16575  locale = uselocale(SOAP_LOCALE(soap));
16576  (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), 20), soap->float_format, n);
16577  uselocale(locale);
16578 # endif
16579 #else
16580  (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), 20), soap->float_format, n);
16581  s = strchr(soap->tmpbuf, ','); /* convert decimal comma to DP */
16582  if (s)
16583  *s = '.';
16584 #endif
16585  return soap->tmpbuf;
16586 }
#define soap_ispinff(n)
Definition: stdsoap2.h:1452
#define soap_isninff(n)
Definition: stdsoap2.h:1454
const char * float_format
Definition: stdsoap2.h:2671

References soap::float_format, soap_isnan, soap_isninff, soap_ispinff, SOAP_SNPRINTF, and soap::tmpbuf.

Referenced by soap_outfloat().

◆ soap_flush()

SOAP_FMAC1 int SOAP_FMAC2 soap_flush ( struct soap soap)

Definition at line 867 of file stdsoap2.cpp.

868 {
869  size_t n = soap->bufidx;
870  if (!n)
871  return soap->error = soap->fsend(soap, SOAP_STR_EOS, 0); /* force a zero send for HTTP GET and DELETE */
872 #ifndef WITH_LEANER
873  if ((soap->mode & SOAP_IO) == SOAP_IO_STORE)
874  {
875  int r;
876  if (soap->fpreparesend && (r = soap->fpreparesend(soap, soap->buf, n)) != SOAP_OK)
877  return soap->error = r;
878  }
879 #endif
880  soap->bufidx = 0;
881 #ifdef WITH_ZLIB
882  if ((soap->mode & SOAP_ENC_ZLIB) && soap->d_stream)
883  {
884  soap->d_stream->next_in = (Byte*)soap->buf;
885  soap->d_stream->avail_in = (unsigned int)n;
886 #ifdef WITH_GZIP
887  soap->z_crc = crc32(soap->z_crc, (Byte*)soap->buf, (unsigned int)n);
888 #endif
889  do
890  {
891  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Deflating %u bytes\n", soap->d_stream->avail_in));
892  if (deflate(soap->d_stream, Z_NO_FLUSH) != Z_OK)
893  {
894  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unable to deflate: %s\n", soap->d_stream->msg ? soap->d_stream->msg : SOAP_STR_EOS));
895  return soap->error = SOAP_ZLIB_ERROR;
896  }
897  if (!soap->d_stream->avail_out)
898  {
899  if (soap_flush_raw(soap, soap->z_buf, sizeof(soap->buf)))
900  return soap->error;
901  soap->d_stream->next_out = (Byte*)soap->z_buf;
902  soap->d_stream->avail_out = sizeof(soap->buf);
903  }
904  } while (soap->d_stream->avail_in);
905  return SOAP_OK;
906  }
907 #endif
908  return soap_flush_raw(soap, soap->buf, n);
909 }
#define Z_NO_FLUSH
Definition: zlib.h:164

References soap::buf, soap::bufidx, crc32(), soap::d_stream, DBGLOG, deflate(), soap::error, soap::fpreparesend, soap::fsend, soap::mode, SOAP_ENC_ZLIB, soap_flush_raw(), SOAP_IO, SOAP_IO_STORE, SOAP_OK, SOAP_STR_EOS, SOAP_ZLIB_ERROR, TEST(), soap::z_buf, soap::z_crc, Z_NO_FLUSH, and Z_OK.

Referenced by soap_end_send_flush(), soap_response(), soap_send_raw(), and soap_try_connect_command().

◆ soap_flush_raw()

SOAP_FMAC1 int SOAP_FMAC2 soap_flush_raw ( struct soap soap,
const char *  s,
size_t  n 
)

Definition at line 916 of file stdsoap2.cpp.

917 {
918  if ((soap->mode & SOAP_IO) == SOAP_IO_STORE)
919  {
920  void *t;
921  t = soap_push_block(soap, NULL, n);
922  if (!t)
923  return soap->error = SOAP_EOM;
924  (void)soap_memcpy(t, n, (const void*)s, n);
925  return SOAP_OK;
926  }
927 #ifndef WITH_LEANER
928  if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK)
929  {
930  char t[24];
931  (SOAP_SNPRINTF(t, sizeof(t), 20), &"\r\n%lX\r\n"[soap->chunksize ? 0 : 2], (unsigned long)n);
932  DBGMSG(SENT, t, strlen(t));
933  soap->error = soap->fsend(soap, t, strlen(t));
934  if (soap->error)
935  return soap->error;
936  soap->chunksize += n;
937  }
938  DBGMSG(SENT, s, n);
939  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Send %u bytes to socket=%d/fd=%d\n", (unsigned int)n, (int)soap->socket, soap->sendfd));
940 #endif
941  return soap->error = soap->fsend(soap, s, n);
942 }

References soap::chunksize, DBGLOG, DBGMSG, soap::error, soap::fsend, soap::mode, NULL, soap::sendfd, SOAP_EOM, SOAP_IO, SOAP_IO_CHUNK, SOAP_IO_STORE, soap_memcpy, SOAP_OK, soap_push_block(), SOAP_SNPRINTF, soap::socket, and TEST().

Referenced by soap_end_send_flush(), soap_flush(), and soap_send_raw().

◆ soap_force_closesock()

SOAP_FMAC1 int SOAP_FMAC2 soap_force_closesock ( struct soap soap)

Definition at line 7233 of file stdsoap2.cpp.

7234 {
7235  soap->keep_alive = 0;
7237  {
7240  }
7241  return soap->error;
7242 }

References soap::error, soap::fclosesocket, soap::keep_alive, SOAP_INVALID_SOCKET, soap_valid_socket, and soap::socket.

◆ soap_free()

SOAP_FMAC1 void SOAP_FMAC2 soap_free ( struct soap soap)

Definition at line 9582 of file stdsoap2.cpp.

9583 {
9584  soap_done(soap);
9585 #ifdef __cplusplus
9587 #else
9589 #endif
9590 }
#define SOAP_DELETE_UNMANAGED(soap)
Definition: stdsoap2.h:1893

References SOAP_DELETE_UNMANAGED, soap_done(), and SOAP_FREE_UNMANAGED.

Referenced by process_message(), and soap_copy().

◆ soap_free_stream()

SOAP_FMAC1 void SOAP_FMAC2 soap_free_stream ( struct soap soap)

Definition at line 12006 of file stdsoap2.cpp.

12007 {
12011 #ifdef WITH_OPENSSL
12012  soap->bio = NULL;
12013  soap->ctx = NULL;
12014  soap->ssl = NULL;
12015 #endif
12016 #ifdef WITH_GNUTLS
12017  soap->xcred = NULL;
12018  soap->acred = NULL;
12019  soap->cache = NULL;
12020  soap->session = NULL;
12021  soap->dh_params = NULL;
12022  soap->rsa_params = NULL;
12023 #endif
12024 #ifdef WITH_SYSTEMSSL
12025  soap->ctx = (gsk_handle)NULL;
12026  soap->ssl = (gsk_handle)NULL;
12027 #endif
12028 #ifdef WITH_ZLIB
12029  if (soap->z_buf)
12030  SOAP_FREE(soap, soap->z_buf);
12031  soap->z_buf = NULL;
12032 #endif
12033 }

References soap::bio, soap::ctx, soap::dh_params, NULL, soap::recvsk, soap::rsa_params, soap::sendsk, soap::session, SOAP_FREE, SOAP_INVALID_SOCKET, soap::socket, soap::ssl, and soap::z_buf.

◆ soap_free_temp()

SOAP_FMAC1 void SOAP_FMAC2 soap_free_temp ( struct soap soap)

Definition at line 11513 of file stdsoap2.cpp.

11514 {
11515  struct soap_attribute *tp, *tq;
11516  struct Namespace *ns;
11517  soap_free_ns(soap);
11518  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free any remaining temp blocks\n"));
11519  while (soap->blist)
11521  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free attribute storage\n"));
11522  for (tp = soap->attributes; tp; tp = tq)
11523  {
11524  tq = tp->next;
11525  if (tp->value)
11526  SOAP_FREE(soap, tp->value);
11527  SOAP_FREE(soap, tp);
11528  }
11529  soap->attributes = NULL;
11530 #ifdef WITH_FAST
11531  if (soap->labbuf)
11533  soap->labbuf = NULL;
11534  soap->lablen = 0;
11535  soap->labidx = 0;
11536 #endif
11538  if (ns)
11539  {
11540  for (; ns->id; ns++)
11541  {
11542  if (ns->out)
11543  {
11544  SOAP_FREE(soap, ns->out);
11545  ns->out = NULL;
11546  }
11547  }
11550  }
11551 #ifndef WITH_LEANER
11552  while (soap->xlist)
11553  {
11554  struct soap_xlist *xp = soap->xlist->next;
11555  SOAP_FREE(soap, soap->xlist);
11556  soap->xlist = xp;
11557  }
11558 #endif
11559 #ifndef WITH_NOIDREF
11561 #endif
11563 }
static void soap_free_pht(struct soap *)
Definition: stdsoap2.cpp:9605

References soap::attributes, soap::blist, DBGLOG, soap::labbuf, soap::labidx, soap::lablen, soap::local_namespaces, soap_attribute::next, soap_xlist::next, Namespace::ns, NULL, soap_end_block(), SOAP_FREE, soap_free_iht(), soap_free_ns(), soap_free_pht(), TEST(), soap_attribute::value, and soap::xlist.

Referenced by soap_begin(), soap_begin_recv(), soap_done(), soap_end(), soap_PATCH__QName(), soap_PATCH_byte(), soap_PATCH_int(), soap_PATCH_ns1__executeCommand(), soap_PATCH_ns1__executeCommandResponse(), soap_PATCH_SOAP_ENV__Code(), soap_PATCH_SOAP_ENV__Detail(), soap_PATCH_SOAP_ENV__Fault(), soap_PATCH_SOAP_ENV__Header(), soap_PATCH_SOAP_ENV__Reason(), soap_PATCH_string(), soap_POST_send__QName(), soap_POST_send_byte(), soap_POST_send_int(), soap_POST_send_ns1__executeCommand(), soap_POST_send_ns1__executeCommandResponse(), soap_POST_send_SOAP_ENV__Code(), soap_POST_send_SOAP_ENV__Detail(), soap_POST_send_SOAP_ENV__Fault(), soap_POST_send_SOAP_ENV__Header(), soap_POST_send_SOAP_ENV__Reason(), soap_POST_send_string(), soap_PUT__QName(), soap_PUT_byte(), soap_PUT_int(), soap_PUT_ns1__executeCommand(), soap_PUT_ns1__executeCommandResponse(), soap_PUT_SOAP_ENV__Code(), soap_PUT_SOAP_ENV__Detail(), soap_PUT_SOAP_ENV__Fault(), soap_PUT_SOAP_ENV__Header(), soap_PUT_SOAP_ENV__Reason(), soap_PUT_string(), soap_write__QName(), soap_write_byte(), soap_write_int(), soap_write_ns1__executeCommand(), soap_write_ns1__executeCommandResponse(), soap_write_SOAP_ENV__Code(), soap_write_SOAP_ENV__Detail(), soap_write_SOAP_ENV__Fault(), soap_write_SOAP_ENV__Header(), soap_write_SOAP_ENV__Reason(), and soap_write_string().

◆ soap_get()

SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_get ( struct soap soap)

Definition at line 1959 of file stdsoap2.cpp.

1960 {
1961  soap_wchar c;
1962  c = soap->ahead;
1963  if (c)
1964  {
1965  if ((int)c != EOF)
1966  soap->ahead = 0;
1967  }
1968  else
1969  {
1970  c = soap_get1(soap);
1971  }
1972  while ((int)c != EOF)
1973  {
1974  if (soap->cdata)
1975  {
1976  if (c == ']')
1977  {
1978  c = soap_get1(soap);
1979  if (c == ']')
1980  {
1981  c = soap_get0(soap);
1982  if (c == '>')
1983  {
1984  soap->cdata = 0;
1985  c = soap_get1(soap);
1986  c = soap_get1(soap);
1987  }
1988  else
1989  {
1990  soap_unget(soap, ']');
1991  return ']';
1992  }
1993  }
1994  else
1995  {
1996  soap_revget1(soap);
1997  return ']';
1998  }
1999  }
2000  else
2001  {
2002  return c;
2003  }
2004  }
2005  switch (c)
2006  {
2007  case '<':
2008  do
2009  {
2010  c = soap_get1(soap);
2011  } while (soap_coblank(c));
2012  if (c == '!' || c == '?' || c == '%')
2013  {
2014  int k = 1;
2015  if (c == '!')
2016  {
2017  c = soap_get1(soap);
2018  if (c == '[')
2019  {
2020  do
2021  {
2022  c = soap_get1(soap);
2023  } while ((int)c != EOF && c != '[');
2024  if ((int)c == EOF)
2025  break;
2026  soap->cdata = 1;
2027  c = soap_get1(soap);
2028  continue;
2029  }
2030  if (c == '-' && (c = soap_get1(soap)) == '-')
2031  {
2032  do
2033  {
2034  c = soap_get1(soap);
2035  if (c == '-' && (c = soap_get1(soap)) == '-')
2036  break;
2037  } while ((int)c != EOF);
2038  }
2039  }
2040  else if (c == '?')
2041  {
2042  c = soap_getpi(soap);
2043  }
2044  while ((int)c != EOF)
2045  {
2046  if (c == '<')
2047  {
2048  k++;
2049  }
2050  else if (c == '>')
2051  {
2052  if (--k <= 0)
2053  break;
2054  }
2055  c = soap_get1(soap);
2056  }
2057  if ((int)c == EOF)
2058  break;
2059  c = soap_get1(soap);
2060  continue;
2061  }
2062  if (c == '/')
2063  return SOAP_TT;
2064  soap_revget1(soap);
2065  return SOAP_LT;
2066  case '>':
2067  return SOAP_GT;
2068  case '"':
2069  return SOAP_QT;
2070  case '\'':
2071  return SOAP_AP;
2072  case '&':
2073  return soap_char(soap) | 0x80000000;
2074  }
2075  break;
2076  }
2077  return c;
2078 }
#define SOAP_QT
Definition: stdsoap2.cpp:111
static soap_wchar soap_getpi(struct soap *)
Definition: stdsoap2.cpp:2083
static soap_wchar soap_char(struct soap *)
Definition: stdsoap2.cpp:1893
#define SOAP_AP
Definition: stdsoap2.cpp:112

References soap::ahead, mpq::c, soap::cdata, SOAP_AP, soap_char(), soap_coblank, soap_get0, soap_get1, soap_getpi(), SOAP_GT, SOAP_LT, SOAP_QT, soap_revget1, SOAP_TT, and soap_unget.

Referenced by soap_element_end_in(), soap_getattrval(), soap_getbase64(), soap_gethex(), soap_getutf8(), soap_ignore(), soap_peek_element(), soap_string_in(), and soap_value().

◆ soap_GET()

SOAP_FMAC1 int SOAP_FMAC2 soap_GET ( struct soap soap,
const char *  endpoint,
const char *  action 
)

◆ soap_getbase64()

SOAP_FMAC1 unsigned char* SOAP_FMAC2 soap_getbase64 ( struct soap soap,
int *  n,
int  malloc_flag 
)

Definition at line 2523 of file stdsoap2.cpp.

2524 {
2525  size_t l = 0;
2526  (void)malloc_flag;
2527 #ifdef WITH_DOM
2528  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
2529  {
2530  soap->dom->text = soap_string_in(soap, 0, -1, -1, NULL);
2531  return (unsigned char*)soap_base642s(soap, soap->dom->text, NULL, 0, n);
2532  }
2533 #endif
2534 #ifdef WITH_FAST
2535  soap->labidx = 0;
2536  for (;;)
2537  {
2538  size_t i, k;
2539  char *s;
2540  if (soap_append_lab(soap, NULL, 2))
2541  return NULL;
2542  s = soap->labbuf + soap->labidx;
2543  k = soap->lablen - soap->labidx;
2544  soap->labidx = 3 * (soap->lablen / 3);
2545  if (k > 2)
2546  {
2547  for (i = 0; i < k - 2; i += 3)
2548  {
2549  unsigned long m = 0;
2550  int j = 0;
2551  do
2552  {
2554  if (c < SOAP_AP)
2555  c &= 0x7FFFFFFF;
2556  if (c == '=' || c < 0)
2557  {
2558  unsigned char *p = NULL;
2559  switch (j)
2560  {
2561  case 2:
2562  *s++ = (char)((m >> 4) & 0xFF);
2563  i++;
2564  break;
2565  case 3:
2566  *s++ = (char)((m >> 10) & 0xFF);
2567  *s++ = (char)((m >> 2) & 0xFF);
2568  i += 2;
2569  }
2570  l = soap->lablen + i - k;
2571  if (n)
2572  *n = (int)l;
2573  if (soap->maxlength > 0 && l > (size_t)soap->maxlength)
2574  soap->error = SOAP_LENGTH;
2575  else
2576  {
2577  p = (unsigned char*)soap_malloc(soap, l);
2578  if (p)
2579  (void)soap_memcpy((void*)p, l, (const void*)soap->labbuf, l);
2580  }
2581  if (c >= 0)
2582  {
2583  while ((int)((c = soap_get(soap)) != EOF) && c != SOAP_LT && c != SOAP_TT)
2584  continue;
2585  }
2586  soap_unget(soap, c);
2587  return p;
2588  }
2589  c -= '+';
2590  if (c >= 0 && c <= 79)
2591  {
2592  int b = soap_base64i[c];
2593  if (b >= 64)
2594  {
2595  soap->error = SOAP_TYPE;
2596  return NULL;
2597  }
2598  m = (m << 6) + b;
2599  j++;
2600  }
2601  else if (!soap_coblank(c + '+'))
2602  {
2603  soap->error = SOAP_TYPE;
2604  return NULL;
2605  }
2606  } while (j < 4);
2607  *s++ = (char)((m >> 16) & 0xFF);
2608  *s++ = (char)((m >> 8) & 0xFF);
2609  *s++ = (char)(m & 0xFF);
2610  }
2611  l = soap->lablen;
2612  if (soap->maxlength > 0 && l > (size_t)soap->maxlength)
2613  {
2614  soap->error = SOAP_LENGTH;
2615  return NULL;
2616  }
2617  }
2618  }
2619 #else
2620  if (soap_alloc_block(soap) == NULL)
2621  return NULL;
2622  for (;;)
2623  {
2624  int i;
2625  char *s = (char*)soap_push_block(soap, NULL, 3 * SOAP_BLKLEN); /* must be multiple of 3 */
2626  if (!s)
2627  {
2629  return NULL;
2630  }
2631  for (i = 0; i < SOAP_BLKLEN; i++)
2632  {
2633  unsigned long m = 0;
2634  int j = 0;
2635  do
2636  {
2638  if (c < SOAP_AP)
2639  c &= 0x7FFFFFFF;
2640  if (c == '=' || c < 0)
2641  {
2642  unsigned char *p;
2643  i *= 3;
2644  switch (j)
2645  {
2646  case 2:
2647  *s++ = (char)((m >> 4) & 0xFF);
2648  i++;
2649  l++;
2650  break;
2651  case 3:
2652  *s++ = (char)((m >> 10) & 0xFF);
2653  *s++ = (char)((m >> 2) & 0xFF);
2654  l += 2;
2655  i += 2;
2656  }
2657  if (n)
2658  *n = (int)soap_size_block(soap, NULL, i);
2659  if (soap->maxlength > 0 && l > (size_t)soap->maxlength)
2660  {
2661  soap->error = SOAP_LENGTH;
2663  return NULL;
2664  }
2665  p = (unsigned char*)soap_save_block(soap, NULL, NULL, 0);
2666  if (c >= 0)
2667  {
2668  while ((int)((c = soap_get(soap)) != EOF) && c != SOAP_LT && c != SOAP_TT)
2669  continue;
2670  }
2671  soap_unget(soap, c);
2672  return p;
2673  }
2674  c -= '+';
2675  if (c >= 0 && c <= 79)
2676  {
2677  int b = soap_base64i[c];
2678  if (b >= 64)
2679  {
2680  soap->error = SOAP_TYPE;
2681  return NULL;
2682  }
2683  m = (m << 6) + b;
2684  j++;
2685  }
2686  else if (!soap_coblank(c + '+'))
2687  {
2688  soap->error = SOAP_TYPE;
2689  return NULL;
2690  }
2691  } while (j < 4);
2692  *s++ = (char)((m >> 16) & 0xFF);
2693  *s++ = (char)((m >> 8) & 0xFF);
2694  *s++ = (char)(m & 0xFF);
2695  l += 3;
2696  }
2697  if (soap->maxlength > 0 && l > (size_t)soap->maxlength)
2698  {
2699  soap->error = SOAP_LENGTH;
2701  return NULL;
2702  }
2703  }
2704 #endif
2705 }
SOAP_FMAC1 int SOAP_FMAC2 soap_append_lab(struct soap *soap, const char *s, size_t n)
Definition: stdsoap2.cpp:14396
SOAP_FMAC1 const char *SOAP_FMAC2 soap_base642s(struct soap *soap, const char *s, char *t, size_t l, int *n)
Definition: stdsoap2.cpp:21630
SOAP_FMAC1 struct soap_blist *SOAP_FMAC2 soap_alloc_block(struct soap *soap)
Definition: stdsoap2.cpp:2887
SOAP_FMAC1 size_t SOAP_FMAC2 soap_size_block(struct soap *soap, struct soap_blist *b, size_t n)
Definition: stdsoap2.cpp:3218
#define SOAP_BLKLEN
Definition: stdsoap2.h:1197

References b, mpq::c, soap::dom, soap::error, mpq::l, soap::labbuf, soap::labidx, soap::lablen, soap::maxlength, soap::mode, NULL, SOAP_AP, soap_append_lab(), soap_base642s(), soap_base64i, soap_coblank, soap_get(), SOAP_LENGTH, SOAP_LT, soap_malloc(), soap_memcpy, soap_string_in(), SOAP_TT, SOAP_TYPE, soap_unget, SOAP_XML_DOM, and soap_dom_element::text.

◆ soap_getchar()

SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_getchar ( struct soap soap)

Definition at line 1742 of file stdsoap2.cpp.

1743 {
1744  soap_wchar c;
1745  c = soap->ahead;
1746  if (c)
1747  {
1748  if ((int)c != EOF)
1749  soap->ahead = 0;
1750  return c;
1751  }
1752  return soap_get1(soap);
1753 }

References soap::ahead, mpq::c, and soap_get1.

Referenced by soap_begin_recv(), soap_getdimehdr(), soap_getline(), soap_getpi(), soap_move(), soap_peek_element(), soap_recv_mime_attachment(), and soap_string_in().

◆ soap_getdime()

SOAP_FMAC1 int SOAP_FMAC2 soap_getdime ( struct soap soap)

Definition at line 19439 of file stdsoap2.cpp.

19440 {
19441  if (soap->dime.buflen || soap->dime.chunksize)
19442  {
19443  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Skip remainder of SOAP in DIME (%u bytes or %u bytes in chunk left)\n", (unsigned int)soap->dime.buflen, (unsigned int)soap->dime.chunksize));
19444  do
19445  if (soap_get1(soap) == (int)EOF)
19446  return soap->error = SOAP_CHK_EOF;
19447  while (soap->dime.buflen || soap->dime.chunksize);
19448  if (soap_move(soap, (size_t)(-(long)soap->dime.size&3)))
19449  return soap->error = SOAP_CHK_EOF;
19450  if (!(soap->mode & SOAP_ENC_DIME))
19451  return SOAP_OK;
19452  }
19453  else
19454  {
19455  if (soap_move(soap, (size_t)(((soap->dime.size+3)&(~3)) - soap_tell(soap))))
19456  return soap->error = SOAP_CHK_EOF;
19457  }
19458  for (;;)
19459  {
19460  struct soap_multipart *content;
19461  if (soap_getdimehdr(soap))
19462  break;
19464  {
19465  const char *id, *type, *options;
19466  size_t size, n;
19467  if (!soap->dime.ptr)
19468  return soap->error;
19469  id = soap->dime.id;
19470  type = soap->dime.type;
19471  options = soap->dime.options;
19472  for (;;)
19473  {
19474  size = soap->dime.size;
19475  for (;;)
19476  {
19477  n = soap->buflen - soap->bufidx;
19478  if (size < n)
19479  n = size;
19480  soap->error = soap->fdimewrite(soap, (void*)soap->dime.ptr, soap->buf + soap->bufidx, n);
19481  if (soap->error)
19482  break;
19483  size -= n;
19484  if (!size)
19485  {
19486  soap->bufidx += n;
19487  break;
19488  }
19489  if (soap_recv(soap))
19490  {
19491  soap->error = SOAP_EOF;
19492  goto end;
19493  }
19494  }
19495  if (soap_move(soap, (size_t)(-(long)soap->dime.size&3)))
19496  {
19497  soap->error = SOAP_EOF;
19498  break;
19499  }
19500  if (!(soap->dime.flags & SOAP_DIME_CF))
19501  break;
19502  if (soap_getdimehdr(soap))
19503  break;
19504  }
19505 end:
19506  if (soap->fdimewriteclose)
19507  soap->fdimewriteclose(soap, (void*)soap->dime.ptr);
19508  soap->dime.size = 0;
19509  soap->dime.id = id;
19510  soap->dime.type = type;
19511  soap->dime.options = options;
19512  }
19513  else if ((soap->dime.flags & SOAP_DIME_CF))
19514  {
19515  const char *id, *type, *options;
19516  id = soap->dime.id;
19517  type = soap->dime.type;
19518  options = soap->dime.options;
19519  if (soap_alloc_block(soap) == NULL)
19520  return soap->error = SOAP_EOM;
19521  for (;;)
19522  {
19523  soap_wchar c;
19524  size_t i;
19525  char *s;
19526  if (soap->dime.size > SOAP_MAXDIMESIZE)
19527  {
19528  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "DIME size=%lu exceeds SOAP_MAXDIMESIZE=%lu\n", (unsigned long)soap->dime.size, (unsigned long)SOAP_MAXDIMESIZE));
19529  return soap->error = SOAP_DIME_ERROR;
19530  }
19531  s = (char*)soap_push_block(soap, NULL, soap->dime.size);
19532  if (!s)
19533  return soap->error = SOAP_EOM;
19534  for (i = soap->dime.size; i > 0; i--)
19535  {
19536  c = soap_get1(soap);
19537  if ((int)c == EOF)
19538  return soap->error = SOAP_EOF;
19539  *s++ = (char)c;
19540  }
19541  if (soap_move(soap, (size_t)(-(long)soap->dime.size&3)))
19542  return soap->error = SOAP_EOF;
19543  if (!(soap->dime.flags & SOAP_DIME_CF))
19544  break;
19545  if (soap_getdimehdr(soap))
19546  return soap->error;
19547  }
19548  soap->dime.size = soap->blist->size;
19549  if (soap->dime.size + 1 > soap->dime.size)
19550  soap->blist->size++; /* allocate one more byte in blist for the terminating '\0' */
19552  if (!soap->dime.ptr)
19553  return soap->error;
19554  if (soap->dime.size + 1 > soap->dime.size)
19555  soap->dime.ptr[soap->dime.size] = '\0'; /* make 0-terminated, just in case even though this is binary data */
19556  soap->dime.id = id;
19557  soap->dime.type = type;
19558  soap->dime.options = options;
19559  }
19560  else
19561  {
19563  }
19565  if (!content)
19566  return soap->error = SOAP_EOM;
19567  content->id = soap->dime.id;
19568  content->type = soap->dime.type;
19569  content->options = soap->dime.options;
19570  if (soap->error)
19571  return soap->error;
19572  soap_resolve_attachment(soap, content);
19573  }
19574  if (soap->error != SOAP_DIME_END)
19575  return soap->error;
19576  return soap->error = SOAP_OK;
19577 }
SOAP_FMAC1 int SOAP_FMAC2 soap_recv(struct soap *soap)
Definition: stdsoap2.cpp:1595
SOAP_FMAC1 ULONG64 SOAP_FMAC2 soap_tell(struct soap *soap)
Definition: stdsoap2.cpp:2146
static char * soap_getdimefield(struct soap *, size_t)
Definition: stdsoap2.cpp:19350
SOAP_FMAC1 int SOAP_FMAC2 soap_move(struct soap *soap, ULONG64 n)
Definition: stdsoap2.cpp:2130
#define SOAP_MAXDIMESIZE
Definition: stdsoap2.h:1285
char * ptr
Definition: stdsoap2.h:2143
const char * options
Definition: stdsoap2.h:2146
const char * id
Definition: stdsoap2.h:2144
const char * type
Definition: stdsoap2.h:2145
void *(* fdimewriteopen)(struct soap *, const char *, const char *, const char *)
Definition: stdsoap2.h:2775
void(* fdimewriteclose)(struct soap *, void *)
Definition: stdsoap2.h:2777
int(* fdimewrite)(struct soap *, void *, const char *, size_t)
Definition: stdsoap2.h:2779

References soap::blist, soap::buf, soap::bufidx, soap_dime::buflen, soap::buflen, mpq::c, soap_dime::chunksize, DBGLOG, soap::dime, soap::error, soap::fdimewrite, soap::fdimewriteclose, soap::fdimewriteopen, soap_dime::first, soap_dime::flags, soap_dime::id, soap_multipart::id, if(), soap_dime::last, soap::mode, NULL, soap_dime::options, soap_multipart::options, soap_dime::ptr, soap_blist::size, soap_dime::size, soap_multipart::size, soap_alloc_block(), soap_alloc_multipart(), SOAP_CHK_EOF, SOAP_DIME_CF, SOAP_DIME_END, SOAP_DIME_ERROR, SOAP_ENC_DIME, SOAP_EOF, SOAP_EOM, soap_get1, soap_getdimefield(), soap_getdimehdr(), SOAP_MAXDIMESIZE, soap_move(), SOAP_OK, soap_push_block(), soap_recv(), soap_resolve_attachment(), soap_save_block(), soap_tell(), TEST(), soap_dime::type, and soap_multipart::type.

Referenced by soap_end_recv().

◆ soap_getdimehdr()

SOAP_FMAC1 int SOAP_FMAC2 soap_getdimehdr ( struct soap soap)

Definition at line 19391 of file stdsoap2.cpp.

19392 {
19393  soap_wchar c;
19394  char *s;
19395  int i;
19396  unsigned char tmp[12];
19397  size_t optlen, idlen, typelen;
19398  if (!(soap->mode & SOAP_ENC_DIME))
19399  return soap->error = SOAP_DIME_END;
19400  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get DIME header\n"));
19401  s = (char*)tmp;
19402  for (i = 12; i > 0; i--)
19403  {
19404  c = soap_getchar(soap);
19405  if ((int)c == EOF)
19406  return soap->error = SOAP_CHK_EOF;
19407  *s++ = (char)c;
19408  }
19409  if ((tmp[0] & 0xF8) != SOAP_DIME_VERSION)
19410  return soap->error = SOAP_DIME_MISMATCH;
19411  soap->dime.flags = (tmp[0] & 0x7) | (tmp[1] & 0xF0);
19412  optlen = (tmp[2] << 8) | tmp[3];
19413  idlen = (tmp[4] << 8) | tmp[5];
19414  typelen = (tmp[6] << 8) | tmp[7];
19415  soap->dime.size = ((size_t)tmp[8] << 24) | ((size_t)tmp[9] << 16) | ((size_t)tmp[10] << 8) | ((size_t)tmp[11]);
19416  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "DIME size=%lu flags=0x%X\n", (unsigned long)soap->dime.size, soap->dime.flags));
19417  soap->dime.options = soap_getdimefield(soap, optlen);
19418  if (!soap->dime.options && soap->error)
19419  return soap->error;
19420  soap->dime.id = soap_getdimefield(soap, idlen);
19421  if (!soap->dime.id && soap->error)
19422  return soap->error;
19423  soap->dime.type = soap_getdimefield(soap, typelen);
19424  if (!soap->dime.type && soap->error)
19425  return soap->error;
19426  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "DIME flags=%x id='%s', type='%s', options='%s'\n", soap->dime.flags, soap->dime.id ? soap->dime.id : SOAP_STR_EOS, soap->dime.type ? soap->dime.type : "", soap->dime.options ? soap->dime.options+4 : SOAP_STR_EOS));
19427  if ((soap->dime.flags & SOAP_DIME_ME))
19428  soap->mode &= ~SOAP_ENC_DIME;
19429  return SOAP_OK;
19430 }
#define SOAP_DIME_ME
Definition: stdsoap2.h:1672

References mpq::c, DBGLOG, soap::dime, soap::error, soap_dime::flags, soap_dime::id, soap::mode, soap_dime::options, soap_dime::size, SOAP_CHK_EOF, SOAP_DIME_END, SOAP_DIME_ME, SOAP_DIME_MISMATCH, SOAP_DIME_VERSION, SOAP_ENC_DIME, soap_getchar(), soap_getdimefield(), SOAP_OK, SOAP_STR_EOS, TEST(), and soap_dime::type.

Referenced by soap_begin_recv(), and soap_getdime().

◆ soap_getfault()

SOAP_FMAC3 int SOAP_FMAC4 soap_getfault ( struct soap soap)

Definition at line 85 of file soapC.cpp.

86 {
87  return (soap->fault = soap_get_SOAP_ENV__Fault(soap, NULL, "SOAP-ENV:Fault", NULL)) == NULL;
88 }
SOAP_FMAC3 struct SOAP_ENV__Fault *SOAP_FMAC4 soap_get_SOAP_ENV__Fault(struct soap *soap, struct SOAP_ENV__Fault *p, const char *tag, const char *type)
Definition: soapC.cpp:808

Referenced by soap_recv_fault().

◆ soap_getheader()

SOAP_FMAC3 int SOAP_FMAC4 soap_getheader ( struct soap soap)

Definition at line 26 of file soapC.cpp.

27 {
29  soap->header = soap_in_SOAP_ENV__Header(soap, "SOAP-ENV:Header", soap->header, NULL);
31  return soap->header == NULL;
32 }
SOAP_FMAC3 struct SOAP_ENV__Header *SOAP_FMAC4 soap_in_SOAP_ENV__Header(struct soap *soap, const char *tag, struct SOAP_ENV__Header *a, const char *type)
Definition: soapC.cpp:1187
#define SOAP_END_HEADER
Definition: stdsoap2.h:1781

References soap::header, NULL, soap::part, SOAP_END_HEADER, SOAP_IN_HEADER, and soap_in_SOAP_ENV__Header().

Referenced by soap_recv_header().

◆ soap_gethex()

SOAP_FMAC1 unsigned char* SOAP_FMAC2 soap_gethex ( struct soap soap,
int *  n 
)

Definition at line 2339 of file stdsoap2.cpp.

2340 {
2341  size_t l = 0;
2342 #ifdef WITH_DOM
2343  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
2344  {
2345  soap->dom->text = soap_string_in(soap, 0, -1, -1, NULL);
2346  return (unsigned char*)soap_hex2s(soap, soap->dom->text, NULL, 0, n);
2347  }
2348 #endif
2349 #ifdef WITH_FAST
2350  soap->labidx = 0;
2351  for (;;)
2352  {
2353  char *s;
2354  size_t i, k;
2355  if (soap_append_lab(soap, NULL, 0))
2356  return NULL;
2357  s = soap->labbuf + soap->labidx;
2358  k = soap->lablen - soap->labidx;
2359  soap->labidx = soap->lablen;
2360  for (i = 0; i < k; i++)
2361  {
2362  char d1, d2;
2363  soap_wchar c;
2364  c = soap_get(soap);
2365  if (soap_isxdigit(c))
2366  {
2367  d1 = (char)c;
2368  c = soap_get(soap);
2369  if (soap_isxdigit(c))
2370  {
2371  d2 = (char)c;
2372  }
2373  else
2374  {
2375  soap->error = SOAP_TYPE;
2376  return NULL;
2377  }
2378  }
2379  else
2380  {
2381  unsigned char *p = NULL;
2382  l = soap->lablen + i - k;
2383  soap_unget(soap, c);
2384  if (n)
2385  *n = (int)l;
2386  if (soap->maxlength > 0 && l > (size_t)soap->maxlength)
2387  {
2388  soap->error = SOAP_LENGTH;
2389  }
2390  else
2391  {
2392  p = (unsigned char*)soap_malloc(soap, l);
2393  if (p)
2394  (void)soap_memcpy((void*)p, l, (const void*)soap->labbuf, l);
2395  }
2396  return p;
2397  }
2398  *s++ = (char)(((d1 >= 'A' ? (d1 & 0x7) + 9 : d1 - '0') << 4) + (d2 >= 'A' ? (d2 & 0x7) + 9 : d2 - '0'));
2399  }
2400  l = soap->lablen;
2401  if (soap->maxlength > 0 && l > (size_t)soap->maxlength)
2402  {
2403  soap->error = SOAP_LENGTH;
2404  return NULL;
2405  }
2406  }
2407 #else
2408  if (soap_alloc_block(soap) == NULL)
2409  return NULL;
2410  for (;;)
2411  {
2412  int i;
2413  char *s = (char*)soap_push_block(soap, NULL, SOAP_BLKLEN);
2414  if (!s)
2415  {
2417  return NULL;
2418  }
2419  for (i = 0; i < SOAP_BLKLEN; i++)
2420  {
2421  char d1, d2;
2423  if (soap_isxdigit(c))
2424  {
2425  d1 = (char)c;
2426  c = soap_get(soap);
2427  if (soap_isxdigit(c))
2428  d2 = (char)c;
2429  else
2430  {
2432  soap->error = SOAP_TYPE;
2433  return NULL;
2434  }
2435  }
2436  else
2437  {
2438  unsigned char *p;
2439  soap_unget(soap, c);
2440  if (soap->maxlength > 0 && l > (size_t)soap->maxlength)
2441  {
2442  soap->error = SOAP_LENGTH;
2444  return NULL;
2445  }
2446  if (n)
2447  *n = (int)soap_size_block(soap, NULL, i);
2448  p = (unsigned char*)soap_save_block(soap, NULL, NULL, 0);
2449  return p;
2450  }
2451  *s++ = ((d1 >= 'A' ? (d1 & 0x7) + 9 : d1 - '0') << 4) + (d2 >= 'A' ? (d2 & 0x7) + 9 : d2 - '0');
2452  l++;
2453  }
2454  if (soap->maxlength > 0 && l > (size_t)soap->maxlength)
2455  {
2456  soap->error = SOAP_LENGTH;
2458  return NULL;
2459  }
2460  }
2461 #endif
2462 }
#define d1
static int soap_isxdigit(int)
Definition: stdsoap2.cpp:1343
SOAP_FMAC1 const char *SOAP_FMAC2 soap_hex2s(struct soap *soap, const char *s, char *t, size_t l, int *n)
Definition: stdsoap2.cpp:21750

References mpq::c, d1, soap::dom, soap::error, mpq::l, soap::labbuf, soap::labidx, soap::lablen, soap::maxlength, soap::mode, NULL, soap_alloc_block(), soap_append_lab(), SOAP_BLKLEN, soap_end_block(), soap_get(), soap_hex2s(), soap_isxdigit(), SOAP_LENGTH, soap_malloc(), soap_memcpy, soap_push_block(), soap_save_block(), soap_size_block(), soap_string_in(), SOAP_TYPE, soap_unget, SOAP_XML_DOM, and soap_dom_element::text.

◆ soap_getline()

SOAP_FMAC1 int SOAP_FMAC2 soap_getline ( struct soap soap,
char *  buf,
int  len 
)

Definition at line 19054 of file stdsoap2.cpp.

19055 {
19056  char *s = buf;
19057  int i = len;
19058  soap_wchar c = 0;
19059  for (;;)
19060  {
19061  while (i > 1)
19062  {
19063  c = soap_getchar(soap);
19064  if (c == '\r' || c == '\n')
19065  break;
19066  if ((int)c == EOF)
19067  return soap->error = SOAP_CHK_EOF;
19068  *s++ = (char)c;
19069  i--;
19070  }
19071  *s = '\0';
19072  if (c != '\n')
19073  c = soap_getchar(soap); /* got \r or something else, now get \n */
19074  if (c == '\n')
19075  {
19076  if (i == len) /* empty line: end of HTTP/MIME header */
19077  break;
19078  c = soap_get0(soap);
19079  if (c != ' ' && c != '\t') /* HTTP line continuation? */
19080  break;
19081  }
19082  else if ((int)c == EOF)
19083  {
19084  return soap->error = SOAP_CHK_EOF;
19085  }
19086  else if (i <= 1)
19087  {
19088  return soap->error = SOAP_HDR;
19089  }
19090  }
19091  return SOAP_OK;
19092 }
#define SOAP_HDR
Definition: stdsoap2.h:1550

References mpq::c, soap::error, SOAP_CHK_EOF, soap_get0, soap_getchar(), SOAP_HDR, and SOAP_OK.

Referenced by http_parse(), and soap_getmimehdr().

◆ soap_getmime()

SOAP_FMAC1 int SOAP_FMAC2 soap_getmime ( struct soap soap)

Definition at line 19660 of file stdsoap2.cpp.

19661 {
19663  continue;
19664  return soap->error;
19665 }

References soap::error, NULL, and soap_recv_mime_attachment().

Referenced by soap_end_recv().

◆ soap_getmimehdr()

SOAP_FMAC1 int SOAP_FMAC2 soap_getmimehdr ( struct soap soap)

Definition at line 19586 of file stdsoap2.cpp.

19587 {
19588  struct soap_multipart *content;
19589  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get MIME header\n"));
19590  do
19591  {
19592  if (soap_getline(soap, soap->msgbuf, sizeof(soap->msgbuf)))
19593  return soap->error;
19594  } while (!*soap->msgbuf);
19595  if (soap->msgbuf[0] == '-' && soap->msgbuf[1] == '-')
19596  {
19597  char *s = soap->msgbuf + strlen(soap->msgbuf) - 1;
19598  /* remove white space */
19599  while (soap_coblank((soap_wchar)*s))
19600  s--;
19601  s[1] = '\0';
19602  if (soap->mime.boundary)
19603  {
19604  if (strcmp(soap->msgbuf + 2, soap->mime.boundary))
19605  return soap->error = SOAP_MIME_ERROR;
19606  }
19607  else
19608  {
19610  if (!soap->mime.boundary)
19611  return soap->error = SOAP_EOM;
19612  }
19613  if (soap_getline(soap, soap->msgbuf, sizeof(soap->msgbuf)))
19614  return soap->error;
19615  }
19617  return soap->error = SOAP_EOM;
19618  content = soap->mime.last;
19619  for (;;)
19620  {
19621  char *key = soap->msgbuf;
19622  char *val;
19623  if (!*key)
19624  break;
19625  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "MIME header: %s\n", key));
19626  val = strchr(soap->msgbuf, ':');
19627  if (val)
19628  {
19629  *val = '\0';
19630  do
19631  {
19632  val++;
19633  } while (*val && *val <= 32);
19634  if (!soap_tag_cmp(key, "Content-ID"))
19635  content->id = soap_strdup(soap, val);
19636  else if (!soap_tag_cmp(key, "Content-Location"))
19637  content->location = soap_strdup(soap, val);
19638  else if (!content->id && !soap_tag_cmp(key, "Content-Disposition"))
19639  content->id = soap_strdup(soap, soap_http_header_attribute(soap, val, "name"));
19640  else if (!soap_tag_cmp(key, "Content-Type"))
19641  content->type = soap_strdup(soap, val);
19642  else if (!soap_tag_cmp(key, "Content-Description"))
19643  content->description = soap_strdup(soap, val);
19644  else if (!soap_tag_cmp(key, "Content-Transfer-Encoding"))
19646  }
19647  if (soap_getline(soap, key, sizeof(soap->msgbuf)))
19648  return soap->error;
19649  }
19650  return SOAP_OK;
19651 }
SOAP_FMAC1 LONG64 SOAP_FMAC2 soap_code_int(const struct soap_code_map *code_map, const char *str, LONG64 other)
Definition: stdsoap2.cpp:1779
static const struct soap_code_map mime_codes[]
Definition: stdsoap2.cpp:549
SOAP_FMAC1 int SOAP_FMAC2 soap_getline(struct soap *soap, char *buf, int len)
Definition: stdsoap2.cpp:19054
SOAP_FMAC1 int SOAP_FMAC2 soap_set_mime_attachment(struct soap *soap, const char *ptr, size_t size, enum soap_mime_encoding encoding, const char *type, const char *id, const char *location, const char *description)
Definition: stdsoap2.cpp:20264
soap_mime_encoding
Definition: stdsoap2.h:2177
const char * description
Definition: stdsoap2.h:2201
const char * location
Definition: stdsoap2.h:2200

References soap_mime::boundary, DBGLOG, soap_multipart::description, soap_multipart::encoding, soap::error, soap_multipart::id, soap_mime::last, soap_multipart::location, LONG64, soap::mime, mime_codes, soap::msgbuf, NULL, soap_coblank, soap_code_int(), SOAP_EOM, soap_getline(), soap_http_header_attribute(), SOAP_MIME_ERROR, SOAP_MIME_NONE, SOAP_OK, soap_set_mime_attachment(), soap_strdup(), soap_tag_cmp(), TEST(), and soap_multipart::type.

Referenced by soap_begin_recv(), and soap_recv_mime_attachment().

◆ soap_getoffsets()

SOAP_FMAC1 int SOAP_FMAC2 soap_getoffsets ( const char *  attr,
const int *  size,
int *  offset,
int  dim 
)

Definition at line 3481 of file stdsoap2.cpp.

3482 {
3483  int i, j = 0;
3484  if (offset)
3485  {
3486  for (i = 0; i < dim && attr && *attr; i++)
3487  {
3488  attr++;
3489  j *= size[i];
3490  j += offset[i] = (int)soap_strtol(attr, NULL, 10);
3491  attr = strchr(attr, ',');
3492  }
3493  }
3494  else
3495  {
3496  for (i = 0; i < dim && attr && *attr; i++)
3497  {
3498  attr++;
3499  j *= size[i];
3500  j += (int)soap_strtol(attr, NULL, 10);
3501  attr = strchr(attr, ',');
3502  }
3503  }
3504  return j;
3505 }

References NULL, soap_ilist::size, and soap_strtol.

◆ soap_getposition()

SOAP_FMAC1 int SOAP_FMAC2 soap_getposition ( const char *  attr,
int *  pos 
)

Definition at line 3512 of file stdsoap2.cpp.

3513 {
3514  int i, n;
3515  if (!*attr)
3516  return -1;
3517  n = 0;
3518  i = 1;
3519  do
3520  {
3521  pos[n++] = (int)soap_strtol(attr + i, NULL, 10);
3522  while (attr[i] && attr[i] != ',' && attr[i] != ']')
3523  i++;
3524  if (attr[i] == ',')
3525  i++;
3526  } while (n < SOAP_MAXDIMS && attr[i] && attr[i] != ']');
3527  return n;
3528 }
static uint pos(unsigned char c)
Definition: base64.c:104
#define SOAP_MAXDIMS
Definition: stdsoap2.h:1225

References NULL, pos(), SOAP_MAXDIMS, and soap_strtol.

Referenced by soap_peek_element().

◆ soap_getsizes()

SOAP_FMAC1 size_t SOAP_FMAC2 soap_getsizes ( const char *  attr,
int *  size,
int  dim 
)

Definition at line 3456 of file stdsoap2.cpp.

3457 {
3458  size_t i, k, n;
3459  if (!*attr)
3460  return 0;
3461  i = strlen(attr);
3462  n = 1;
3463  do
3464  {
3465  for (; i > 0; i--)
3466  if (attr[i - 1] == '[' || attr[i - 1] == ',' || attr[i - 1] == ' ')
3467  break;
3468  n *= k = (size_t)soap_strtoul(attr + i, NULL, 10);
3469  size[--dim] = (int)k;
3470  if (n > SOAP_MAXARRAYSIZE)
3471  return 0;
3472  } while (dim > 0 && --i > 0 && attr[i] != '[');
3473  return n;
3474 }
#define SOAP_MAXARRAYSIZE
Definition: stdsoap2.h:1276
#define soap_strtoul(s, t, b)
Definition: stdsoap2.h:3088

References NULL, soap_ilist::size, SOAP_MAXARRAYSIZE, and soap_strtoul.

◆ soap_getutf8()

SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_getutf8 ( struct soap soap)

Definition at line 2220 of file stdsoap2.cpp.

2221 {
2222 #ifdef WITH_REPLACE_ILLEGAL_UTF8
2223  soap_wchar c, c1, c2, c3;
2224 #else
2225  soap_wchar c, c1, c2, c3, c4;
2226 #endif
2227  c = soap->ahead;
2228  if (c >= 0x80)
2229  soap->ahead = 0;
2230  else
2231  c = (soap_wchar)soap_get(soap);
2232  if (c < 0x80 || c > 0xFF || (soap->mode & SOAP_ENC_LATIN))
2233  return c;
2234 #ifdef WITH_REPLACE_ILLEGAL_UTF8
2235  c1 = (soap_wchar)soap_get1(soap);
2236  if (c <= 0xC1 || (c1 & 0xC0) != 0x80)
2237  {
2238  soap_revget1(soap);
2239  return SOAP_UNKNOWN_UNICODE_CHAR;
2240  }
2241  c1 &= 0x3F;
2242  if (c < 0xE0)
2243  return (((c & 0x1F) << 6) | c1);
2244  c2 = (soap_wchar)soap_get1(soap);
2245  if ((c == 0xE0 && c1 < 0x20) || (c2 & 0xC0) != 0x80)
2246  {
2247  soap_revget1(soap);
2248  return SOAP_UNKNOWN_UNICODE_CHAR;
2249  }
2250  c2 &= 0x3F;
2251  if (c < 0xF0)
2252  return (((c & 0x0F) << 12) | (c1 << 6) | c2);
2253  c3 = (soap_wchar)soap_get1(soap);
2254  if ((c == 0xF0 && c1 < 0x10) || (c == 0xF4 && c1 >= 0x10) || c >= 0xF5 || (c3 & 0xC0) != 0x80)
2255  {
2256  soap_revget1(soap);
2257  return SOAP_UNKNOWN_UNICODE_CHAR;
2258  }
2259  return (((c & 0x07) << 18) | (c1 << 12) | (c2 << 6) | (c3 & 0x3F));
2260 #else
2261  c1 = (soap_wchar)soap_get1(soap);
2262  if (c < 0xC0 || (c1 & 0xC0) != 0x80)
2263  {
2264  soap_revget1(soap);
2265  /* doesn't look like this is UTF-8, try continue as if ISO-8859-1 */
2266  return c;
2267  }
2268  c1 &= 0x3F;
2269  if (c < 0xE0)
2270  return ((soap_wchar)(c & 0x1F) << 6) | c1;
2271  c2 = (soap_wchar)soap_get1(soap) & 0x3F;
2272  if (c < 0xF0)
2273  return ((soap_wchar)(c & 0x0F) << 12) | (c1 << 6) | c2;
2274  c3 = (soap_wchar)soap_get1(soap) & 0x3F;
2275  if (c < 0xF8)
2276  return ((soap_wchar)(c & 0x07) << 18) | (c1 << 12) | (c2 << 6) | c3;
2277  c4 = (soap_wchar)soap_get1(soap) & 0x3F;
2278  if (c < 0xFC)
2279  return ((soap_wchar)(c & 0x03) << 24) | (c1 << 18) | (c2 << 12) | (c3 << 6) | c4;
2280  return ((soap_wchar)(c & 0x01) << 30) | (c1 << 24) | (c2 << 18) | (c3 << 12) | (c4 << 6) | (soap_wchar)(soap_get1(soap) & 0x3F);
2281 #endif
2282 }

References soap::ahead, mpq::c, soap::mode, SOAP_ENC_LATIN, soap_get(), soap_get1, and soap_revget1.

Referenced by soap_getattrval(), soap_peek_element(), soap_string_in(), and soap_wstring_in().

◆ soap_hash()

SOAP_FMAC1 size_t SOAP_FMAC2 soap_hash ( const char *  s)

Definition at line 9539 of file stdsoap2.cpp.

9540 {
9541  size_t h = 0;
9542  while (*s)
9543  h = *s++ + (h << 6) + (h << 16) - h; /* Red Dragon book h = 65599*h + c */
9544  return h % SOAP_IDHASH;
9545 }

References SOAP_IDHASH.

Referenced by soap_enter(), and soap_lookup().

◆ soap_header()

SOAP_FMAC3 void SOAP_FMAC4 soap_header ( struct soap soap)

Definition at line 51 of file soapC.cpp.

52 {
53  if (soap->header == NULL)
56  }
57 }
SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Header(struct soap *soap, struct SOAP_ENV__Header *a)
Definition: soapC.cpp:1167
struct SOAP_ENV__Header * soap_new_SOAP_ENV__Header(struct soap *soap, int n=-1)
Definition: soapH.h:630

◆ soap_hex2s()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_hex2s ( struct soap soap,
const char *  s,
char *  t,
size_t  l,
int *  n 
)

Definition at line 21750 of file stdsoap2.cpp.

21751 {
21752  const char *p;
21753  if (!s || !*s)
21754  {
21755  if (n)
21756  *n = 0;
21757  if (soap->error)
21758  return NULL;
21759  return SOAP_NON_NULL;
21760  }
21761  if (!t)
21762  {
21763  l = strlen(s) / 2 + 1; /* make sure enough space for \0 */
21764  t = (char*)soap_malloc(soap, l);
21765  }
21766  if (!t)
21767  return NULL;
21768  p = t;
21769  while (l)
21770  {
21771  int d1, d2;
21772  d1 = *s++;
21773  if (!d1)
21774  break;
21775  d2 = *s++;
21776  if (!d2)
21777  break;
21778  *t++ = (char)(((d1 >= 'A' ? (d1 & 0x7) + 9 : d1 - '0') << 4) + (d2 >= 'A' ? (d2 & 0x7) + 9 : d2 - '0'));
21779  l--;
21780  }
21781  if (n)
21782  *n = (int)(t - p);
21783  if (l)
21784  *t = '\0';
21785  return p;
21786 }

References d1, soap::error, mpq::l, NULL, soap_malloc(), and SOAP_NON_NULL.

Referenced by soap_gethex().

◆ soap_http_content_type()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_http_content_type ( struct soap soap,
int  status 
)

Definition at line 21794 of file stdsoap2.cpp.

21795 {
21796  if (soap->status != SOAP_GET && soap->status != SOAP_DEL && soap->status != SOAP_CONNECT)
21797  {
21798  const char *s = "text/xml; charset=utf-8";
21799 #ifndef WITH_LEANER
21800  const char *r = NULL;
21801  size_t n;
21802 #endif
21803  if (((status >= SOAP_FILE && status < SOAP_FILE + 600) || soap->status == SOAP_PUT || soap->status == SOAP_POST_FILE || soap->status == SOAP_PATCH) && soap->http_content && *soap->http_content && !strchr(soap->http_content, 10) && !strchr(soap->http_content, 13))
21804  s = soap->http_content;
21805  else if (status == SOAP_HTML)
21806  s = "text/html; charset=utf-8";
21807  else if (soap->version == 2)
21808  s = "application/soap+xml; charset=utf-8";
21809  soap->http_content = NULL; /* use http_content once (assign new value before each call) */
21810 #ifndef WITH_LEANER
21811  if (soap->mode & (SOAP_ENC_DIME | SOAP_ENC_MTOM))
21812  {
21813  if ((soap->mode & SOAP_ENC_MTOM))
21814  {
21815  if (soap->version == 2)
21816  r = "application/soap+xml";
21817  else
21818  r = "text/xml";
21819  s = "application/xop+xml";
21820  }
21821  else
21822  {
21823  s = "application/dime";
21824  }
21825  }
21826  if ((soap->mode & SOAP_ENC_MIME) && soap->mime.boundary)
21827  {
21828  const char *t;
21829  size_t l;
21830  (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), strlen(soap->mime.boundary) + 53), "multipart/related; charset=utf-8; boundary=\"%s\"; type=\"", soap->mime.boundary);
21831  t = strchr(s, ';');
21832  if (t)
21833  n = t - s;
21834  else
21835  n = strlen(s);
21836  l = strlen(soap->tmpbuf);
21837  if (sizeof(soap->tmpbuf) > l + n)
21838  (void)soap_strncpy(soap->tmpbuf + l, sizeof(soap->tmpbuf) - l, s, n);
21839  if (soap->mime.start)
21840  {
21841  l = strlen(soap->tmpbuf);
21842  (SOAP_SNPRINTF(soap->tmpbuf + l, sizeof(soap->tmpbuf) - l, strlen(soap->mime.start) + 10), "\"; start=\"%s", soap->mime.start);
21843  }
21844  if (r)
21845  {
21846  l = strlen(soap->tmpbuf);
21847  (SOAP_SNPRINTF(soap->tmpbuf + l, sizeof(soap->tmpbuf) - l, strlen(r) + 15), "\"; start-info=\"%s", r);
21848  }
21849  l = strlen(soap->tmpbuf);
21850  if (sizeof(soap->tmpbuf) > l)
21851  soap_strcpy(soap->tmpbuf + l, sizeof(soap->tmpbuf) - l, "\"");
21852  }
21853  else
21854  {
21855  soap_strcpy(soap->tmpbuf, sizeof(soap->tmpbuf), s);
21856  }
21857  if (status == SOAP_OK && soap->version == 2 && soap->action)
21858  {
21859  size_t l = strlen(soap->tmpbuf);
21860  n = strlen(soap->action);
21861  (SOAP_SNPRINTF(soap->tmpbuf + l, sizeof(soap->tmpbuf) - l, n + 11), "; action=\"%s\"", soap->action);
21862  }
21863 #else
21864  soap_strcpy(soap->tmpbuf, sizeof(soap->tmpbuf), s);
21865 #endif
21866  return soap->tmpbuf;
21867  }
21868  return NULL;
21869 }
#define SOAP_FILE
Definition: stdsoap2.h:1653
#define SOAP_HTML
Definition: stdsoap2.h:1652
#define SOAP_POST_FILE
Definition: stdsoap2.h:1660
#define SOAP_CONNECT
Definition: stdsoap2.h:1667

References soap::action, soap_mime::boundary, soap::http_content, mpq::l, soap::mime, soap::mode, NULL, SOAP_CONNECT, SOAP_DEL, SOAP_ENC_DIME, SOAP_ENC_MIME, SOAP_ENC_MTOM, SOAP_FILE, SOAP_GET, SOAP_HTML, SOAP_OK, SOAP_PATCH, SOAP_POST_FILE, SOAP_PUT, SOAP_SNPRINTF, soap_strcpy, soap_strncpy, soap_mime::start, soap::status, soap::tmpbuf, and soap::version.

Referenced by soap_puthttphdr().

◆ soap_http_get_body()

SOAP_FMAC1 char* SOAP_FMAC2 soap_http_get_body ( struct soap soap,
size_t *  len 
)

Definition at line 20895 of file stdsoap2.cpp.

20896 {
20897  return soap_http_get_body_prefix(soap, len, NULL);
20898 }
SOAP_FMAC1 char *SOAP_FMAC2 soap_http_get_body_prefix(struct soap *soap, size_t *len, const char *prefix)
Definition: stdsoap2.cpp:20915

References NULL, and soap_http_get_body_prefix().

Referenced by soap_begin_recv().

◆ soap_http_get_body_prefix()

SOAP_FMAC1 char* SOAP_FMAC2 soap_http_get_body_prefix ( struct soap soap,
size_t *  len,
const char *  prefix 
)

Definition at line 20915 of file stdsoap2.cpp.

20916 {
20917  char *s;
20918  ULONG64 k = soap->length;
20919  size_t n = 0;
20920  if (!prefix)
20921  prefix = SOAP_STR_EOS;
20922  else
20923  n = strlen(prefix);
20924  if (len)
20925  *len = 0;
20926  /* check HTTP body, return "" if none */
20927  if (!k && !(soap->mode & SOAP_ENC_ZLIB) && (soap->mode & SOAP_IO) != SOAP_IO_CHUNK)
20928  return soap_strdup(soap, prefix);
20929  /* do not consume DIME or MIME attachments, leave this to soap_end_recv */
20930  if ((soap->mode & SOAP_ENC_DIME) || (soap->mode & SOAP_ENC_MIME))
20931  return soap_strdup(soap, prefix);
20932  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Parsing HTTP body, prefixed with '%s' (mode=0x%x)\n", prefix, soap->mode));
20933  if (k && !(soap->mode & SOAP_ENC_ZLIB))
20934  {
20935  char *t;
20936  soap->length = 0;
20937  /* http content length != 0 and uncompressed body */
20938  if ((SOAP_MAXALLOCSIZE != 0 && n + k > SOAP_MAXALLOCSIZE) || n + k > (ULONG64)((size_t)-2))
20939  {
20940  soap->error = SOAP_EOM;
20941  return NULL;
20942  }
20943  s = t = (char*)soap_malloc(soap, (size_t)k + n + 1);
20944  if (s)
20945  {
20946  size_t i;
20947  soap_strcpy(t, n + 1, prefix);
20948  t += n;
20949  for (i = 0; i < k; i++)
20950  {
20952  if ((int)c == EOF)
20953  break;
20954  *t++ = (char)(c & 0xFF);
20955  }
20956  *t = '\0';
20957  if (len)
20958  *len = n + i;
20959  }
20960  else
20961  {
20962  soap->error = SOAP_EOM;
20963  return NULL;
20964  }
20965  }
20966  else
20967  {
20968  size_t i, l = 0;
20969  if (soap_alloc_block(soap) == NULL)
20970  return NULL;
20971  if (n)
20972  {
20973  s = (char*)soap_push_block(soap, NULL, n);
20974  if (!s)
20975  return NULL;
20976  soap_strcpy(s, n + 1, prefix);
20977  l += n;
20978  }
20979  for (;;)
20980  {
20981  size_t k = SOAP_BLKLEN;
20982  s = (char*)soap_push_block(soap, NULL, k);
20983  if (!s)
20984  return NULL;
20985  for (i = 0; i < k; i++)
20986  {
20987  soap_wchar c;
20988  l++;
20989  if (l == 0)
20990  {
20991  soap->error = SOAP_EOM;
20992  return NULL;
20993  }
20994  c = soap_get1(soap);
20995  if ((int)c == EOF)
20996  goto end;
20997  *s++ = (char)(c & 0xFF);
20998  }
20999  }
21000 end:
21001  *s = '\0';
21002  if (len)
21003  *len = l - 1;
21004  soap_size_block(soap, NULL, i + 1);
21005  s = soap_save_block(soap, NULL, NULL, 0);
21006  }
21007  return s;
21008 }

References mpq::c, DBGLOG, soap::error, mpq::l, soap::length, soap::mode, NULL, soap_alloc_block(), SOAP_BLKLEN, SOAP_ENC_DIME, SOAP_ENC_MIME, SOAP_ENC_ZLIB, SOAP_EOM, soap_get1, SOAP_IO, SOAP_IO_CHUNK, soap_malloc(), SOAP_MAXALLOCSIZE, soap_push_block(), soap_save_block(), soap_size_block(), SOAP_STR_EOS, soap_strcpy, soap_strdup(), TEST(), and ULONG64.

Referenced by soap_http_get_body(), and soap_http_get_form().

◆ soap_http_get_form()

SOAP_FMAC1 char* SOAP_FMAC2 soap_http_get_form ( struct soap soap)

Definition at line 20905 of file stdsoap2.cpp.

20906 {
20907  return soap_http_get_body_prefix(soap, NULL, "?");
20908 }

References NULL, and soap_http_get_body_prefix().

◆ soap_http_has_body()

SOAP_FMAC1 int SOAP_FMAC2 soap_http_has_body ( struct soap soap)

Definition at line 20847 of file stdsoap2.cpp.

20848 {
20849  return soap->length || (soap->mode & SOAP_ENC_ZLIB) || (soap->mode & SOAP_IO) == SOAP_IO_CHUNK;
20850 }

References soap::length, soap::mode, SOAP_ENC_ZLIB, SOAP_IO, and SOAP_IO_CHUNK.

◆ soap_http_header_attribute()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_http_header_attribute ( struct soap soap,
const char *  line,
const char *  key 
)

Definition at line 7858 of file stdsoap2.cpp.

7859 {
7860  const char *s = line;
7861  if (s)
7862  {
7863  while (*s)
7864  {
7865  short flag;
7866  s = soap_decode_key(soap->tmpbuf, sizeof(soap->tmpbuf), s);
7867  flag = soap_tag_cmp(soap->tmpbuf, key);
7868  s = soap_decode_val(soap->tmpbuf, sizeof(soap->tmpbuf), s);
7869  if (!flag)
7870  return soap->tmpbuf;
7871  }
7872  }
7873  return NULL;
7874 }
SOAP_FMAC1 const char *SOAP_FMAC2 soap_decode_val(char *buf, size_t len, const char *val)
Definition: stdsoap2.cpp:7895
SOAP_FMAC1 const char *SOAP_FMAC2 soap_decode_key(char *buf, size_t len, const char *val)
Definition: stdsoap2.cpp:7883

References NULL, soap_decode_key(), soap_decode_val(), soap_tag_cmp(), and soap::tmpbuf.

Referenced by http_parse_header(), soap_begin_recv(), and soap_getmimehdr().

◆ soap_http_skip_body()

SOAP_FMAC1 int SOAP_FMAC2 soap_http_skip_body ( struct soap soap)

Definition at line 20857 of file stdsoap2.cpp.

20858 {
20859  ULONG64 k = soap->length;
20860  /* check HTTP body, return "" if none */
20861  if (!k && !(soap->mode & SOAP_ENC_ZLIB) && (soap->mode & SOAP_IO) != SOAP_IO_CHUNK)
20862  return SOAP_OK;
20863  /* do not consume DIME or MIME attachments, leave this to soap_end_recv */
20864  if ((soap->mode & SOAP_ENC_DIME) || (soap->mode & SOAP_ENC_MIME))
20865  return SOAP_OK;
20866  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Skipping HTTP body (mode=0x%x)\n", soap->mode));
20867  if (k && !(soap->mode & SOAP_ENC_ZLIB))
20868  {
20869  size_t i;
20870  soap->length = 0;
20871  for (i = 0; i < k; i++)
20872  {
20874  if ((int)c == EOF)
20875  break;
20876  }
20877  }
20878  else
20879  {
20880  for (;;)
20881  {
20883  if ((int)c == EOF)
20884  break;
20885  }
20886  }
20887  return SOAP_OK;
20888 }

References mpq::c, DBGLOG, soap::length, soap::mode, SOAP_ENC_DIME, SOAP_ENC_MIME, SOAP_ENC_ZLIB, soap_get1, SOAP_IO, SOAP_IO_CHUNK, SOAP_OK, TEST(), and ULONG64.

Referenced by soap_begin_recv(), and soap_recv_empty_response().

◆ soap_id_enter()

SOAP_FMAC1 void* SOAP_FMAC2 soap_id_enter ( struct soap soap,
const char *  id,
void *  p,
int  t,
size_t  n,
const char *  type,
const char *  arrayType,
void *(*)(struct soap *, int, const char *, const char *, size_t *)  finstantiate,
int(*)(int, int)  fbase 
)

Definition at line 11054 of file stdsoap2.cpp.

11055 {
11056 #ifndef WITH_NOIDREF
11057  struct soap_ilist *ip;
11058 #endif
11059  (void)id; (void)fbase;
11060  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Enter id='%s' type=%d location=%p size=%lu\n", id, t, p, (unsigned long)n));
11061  soap->alloced = 0;
11062  if (!p)
11063  {
11064  if (finstantiate)
11065  {
11066  p = finstantiate(soap, t, type, arrayType, &n); /* soap->alloced is set in soap_link() */
11067  t = soap->alloced;
11068  }
11069  else
11070  {
11071  p = soap_malloc(soap, n);
11072  soap->alloced = t;
11073  }
11074  }
11075 #ifndef WITH_NOIDREF
11076  if (!id || !*id)
11077 #endif
11078  return p;
11079 #ifndef WITH_NOIDREF
11080  ip = soap_lookup(soap, id); /* lookup pointer to hash table entry for string id */
11081  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Lookup entry id='%s' for location=%p type=%d\n", id, p, t));
11082  if (!ip)
11083  {
11084  ip = soap_enter(soap, id, t, n); /* new hash table entry for string id */
11085  if (!ip)
11086  return NULL;
11087  ip->ptr = p;
11088  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "New entry id='%s' type=%d size=%lu location=%p\n", id, t, (unsigned long)n, p));
11089  if (!soap->alloced)
11090  ip->shaky = soap_is_shaky(soap, p);
11091  }
11092  else if (ip->ptr)
11093  {
11094  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Multiply defined id='%s'\n", id));
11095  soap_strcpy(soap->id, sizeof(soap->id), id);
11097  return NULL;
11098  }
11099  else if ((ip->type != t && (!fbase || !fbase(t, ip->type) || soap_type_punned(soap, ip)))
11100  || (ip->type == t && ip->size != n && soap_type_punned(soap, ip)))
11101  {
11102  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Enter type incompatibility id='%s' expect type=%d size=%lu got type=%d size=%lu\n", id, ip->type, (unsigned long)ip->size, t, (unsigned long)n));
11103  (void)soap_id_nullify(soap, id);
11104  return NULL;
11105  }
11106  else
11107  {
11108  ip->type = t;
11109  ip->size = n;
11110  ip->ptr = p;
11111  if (!soap->alloced)
11112  ip->shaky = soap_is_shaky(soap, p);
11113  if (soap->alloced || !ip->shaky)
11114  {
11115  void **q; /* ptr will not change later, so resolve links now */
11116  if (ip->spine)
11117  ip->spine[0] = p;
11118  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Traversing link chain to resolve id='%s' type=%d\n", ip->id, ip->type));
11119  q = (void**)ip->link;
11120  while (q)
11121  {
11122  void *r = *q;
11123  *q = p;
11124  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "... link %p -> %p\n", (void*)q, p));
11125  q = (void**)r;
11126  }
11127  ip->link = NULL;
11128  }
11129  }
11130  return ip->ptr;
11131 #endif
11132 }
SOAP_FMAC1 int SOAP_FMAC2 soap_id_nullify(struct soap *soap, const char *id)
Definition: stdsoap2.cpp:11182
SOAP_FMAC1 struct soap_ilist *SOAP_FMAC2 soap_lookup(struct soap *soap, const char *id)
Definition: stdsoap2.cpp:10353
static int soap_type_punned(struct soap *, const struct soap_ilist *)
Definition: stdsoap2.cpp:11163
SOAP_FMAC1 struct soap_ilist *SOAP_FMAC2 soap_enter(struct soap *soap, const char *id, int t, size_t n)
Definition: stdsoap2.cpp:10369
static int soap_is_shaky(struct soap *, void *)
Definition: stdsoap2.cpp:10886
int alloced
Definition: stdsoap2.h:2842

References soap::alloced, DBGLOG, soap::error, soap_ilist::id, soap::id, soap_ilist::link, NULL, soap_ilist::ptr, soap_ilist::shaky, soap_ilist::size, SOAP_DUPLICATE_ID, soap_enter(), soap_id_nullify(), soap_is_shaky(), soap_lookup(), soap_malloc(), soap_strcpy, soap_type_punned(), soap_ilist::spine, TEST(), and soap_ilist::type.

Referenced by soap_in_ns1__executeCommand(), soap_in_ns1__executeCommandResponse(), soap_in_SOAP_ENV__Code(), soap_in_SOAP_ENV__Detail(), soap_in_SOAP_ENV__Fault(), soap_in_SOAP_ENV__Header(), soap_in_SOAP_ENV__Reason(), soap_inbyte(), soap_indateTime(), soap_indouble(), soap_infloat(), soap_inint(), soap_inlong(), soap_inLONG64(), soap_inshort(), soap_instring(), soap_inULONG64(), soap_inunsignedByte(), soap_inunsignedInt(), soap_inunsignedLong(), soap_inunsignedShort(), and soap_inwstring().

◆ soap_id_forward()

SOAP_FMAC1 void* SOAP_FMAC2 soap_id_forward ( struct soap soap,
const char *  id,
void *  p,
size_t  i,
int  t,
int  tt,
size_t  n,
unsigned int  k,
void(*)(struct soap *, int, int, void *, size_t, const void *, void **)  finsert,
int(*)(int, int)  fbase 
)

Definition at line 10990 of file stdsoap2.cpp.

10991 {
10992  struct soap_ilist *ip;
10993  if (!p || !href || !*href)
10994  return p;
10995  ip = soap_lookup(soap, href); /* lookup pointer to hash table entry for string id */
10996  if (!ip)
10997  {
10998  ip = soap_enter(soap, href, t, n); /* new hash table entry for string id */
10999  if (!ip)
11000  return NULL;
11001  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "New entry href='%s' type=%d size=%lu level=%d location=%p\n", href, t, (unsigned long)n, k, p));
11002  }
11003  else if ((ip->type != t || ip->size != n) && k == 0)
11004  {
11005  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forward type incompatibility id='%s' expect type=%d size=%lu level=%u got type=%d size=%lu\n", href, ip->type, (unsigned long)ip->size, k, t, (unsigned long)n));
11006  (void)soap_id_nullify(soap, href);
11007  return NULL;
11008  }
11009  if (finsert || n < sizeof(void*))
11010  {
11011  struct soap_flist *fp = (struct soap_flist*)SOAP_MALLOC(soap, sizeof(struct soap_flist));
11012  if (!fp)
11013  {
11014  soap->error = SOAP_EOM;
11015  return NULL;
11016  }
11017  if (fbase && fbase(t, ip->type) && !soap_type_punned(soap, ip))
11018  {
11019  ip->type = t;
11020  ip->size = n;
11021  }
11022  if ((ip->type != t || ip->size != n) && (!fbase || !fbase(ip->type, t)))
11023  {
11024  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forward type incompatibility id='%s' expect type=%d size=%lu level=%u got type=%d size=%lu\n", href, ip->type, (unsigned long)ip->size, k, t, (unsigned long)n));
11025  SOAP_FREE(soap, fp);
11026  (void)soap_id_nullify(soap, href);
11027  return NULL;
11028  }
11029  fp->next = ip->flist;
11030  fp->type = tt;
11031  fp->ptr = p;
11032  fp->level = k;
11033  fp->index = i;
11034  fp->finsert = finsert;
11035  ip->flist = fp;
11036  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarding type=%d (target type=%d) size=%lu location=%p level=%u index=%lu href='%s'\n", t, tt, (unsigned long)n, p, k, (unsigned long)i, href));
11037  }
11038  else
11039  {
11040  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarding copying address %p for type=%d href='%s'\n", p, t, href));
11041  *(void**)p = ip->copy;
11042  ip->copy = p;
11043  }
11044  ip->shaky = soap_is_shaky(soap, p);
11045  return p;
11046 }
size_t index
Definition: stdsoap2.h:3007
void * ptr
Definition: stdsoap2.h:3005
struct soap_flist * next
Definition: stdsoap2.h:3003
unsigned int level
Definition: stdsoap2.h:3006
void(* finsert)(struct soap *, int, int, void *, size_t, const void *, void **)
Definition: stdsoap2.h:3008

References soap_ilist::copy, DBGLOG, soap::error, soap_flist::finsert, soap_ilist::flist, soap_flist::index, soap_flist::level, soap_flist::next, NULL, soap_flist::ptr, soap_ilist::shaky, soap_ilist::size, soap_enter(), SOAP_EOM, SOAP_FREE, soap_id_nullify(), soap_is_shaky(), soap_lookup(), SOAP_MALLOC, soap_type_punned(), TEST(), soap_flist::type, and soap_ilist::type.

Referenced by soap_in_ns1__executeCommand(), soap_in_ns1__executeCommandResponse(), soap_in_SOAP_ENV__Code(), soap_in_SOAP_ENV__Detail(), soap_in_SOAP_ENV__Fault(), soap_in_SOAP_ENV__Header(), soap_in_SOAP_ENV__Reason(), soap_inbyte(), soap_indateTime(), soap_indouble(), soap_infloat(), soap_inint(), soap_inlong(), soap_inLONG64(), soap_inshort(), soap_inULONG64(), soap_inunsignedByte(), soap_inunsignedInt(), soap_inunsignedLong(), and soap_inunsignedShort().

◆ soap_id_lookup()

SOAP_FMAC1 void* SOAP_FMAC2 soap_id_lookup ( struct soap soap,
const char *  id,
void **  p,
int  t,
size_t  n,
unsigned int  k,
int(*)(int, int)  fbase 
)

Definition at line 10902 of file stdsoap2.cpp.

10903 {
10904  struct soap_ilist *ip;
10905  if (!p || !id || !*id)
10906  return p;
10907  ip = soap_lookup(soap, id); /* lookup pointer to hash table entry for string id */
10908  if (!ip)
10909  {
10910  ip = soap_enter(soap, id, t, n); /* new hash table entry for string id */
10911  if (!ip)
10912  return NULL;
10913  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarding first href='%s' type=%d location=%p (%u bytes) level=%u\n", id, t, (void*)p, (unsigned int)n, k));
10914  *p = NULL;
10915  if (k)
10916  {
10917  int i;
10918  if (k > SOAP_MAXPTRS)
10919  return NULL;
10920  ip->spine = (void**)soap_malloc(soap, SOAP_MAXPTRS * sizeof(void*));
10921  if (!ip->spine)
10922  return NULL;
10923  ip->spine[0] = NULL;
10924  for (i = 1; i < SOAP_MAXPTRS; i++)
10925  ip->spine[i] = &ip->spine[i - 1];
10926  *p = &ip->spine[k - 1];
10927  }
10928  else
10929  {
10930  ip->link = p;
10931  ip->shaky = soap_is_shaky(soap, (void*)p);
10932  }
10933  }
10934  else if (ip->type != t && (!fbase || !fbase(ip->type, t)) && (!fbase || !fbase(t, ip->type) || soap_type_punned(soap, ip)))
10935  {
10936  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Lookup type incompatibility: ref='%s' id-type=%d ref-type=%d\n", id, ip->type, t));
10937  (void)soap_id_nullify(soap, id);
10938  return NULL;
10939  }
10940  else if (k == 0 && ip->ptr && !ip->shaky) /* when block lists are in use, ip->ptr will change */
10941  {
10942  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolved href='%s' type=%d location=%p (%u bytes) level=%u\n", id, t, ip->ptr, (unsigned int)n, k));
10943  *p = ip->ptr;
10944  }
10945  else
10946  {
10947  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarded href='%s' type=%d location=%p (%u bytes) level=%u\n", id, t, (void*)p, (unsigned int)n, k));
10948  if (fbase && fbase(t, ip->type) && !soap_type_punned(soap, ip))
10949  {
10950  ip->type = t;
10951  ip->size = n;
10952  }
10953  *p = NULL;
10954  if (k)
10955  {
10956  if (!ip->spine)
10957  {
10958  int i;
10959  if (k > SOAP_MAXPTRS)
10960  return NULL;
10961  ip->spine = (void**)soap_malloc(soap, SOAP_MAXPTRS * sizeof(void*));
10962  if (!ip->spine)
10963  return NULL;
10964  ip->spine[0] = NULL;
10965  for (i = 1; i < SOAP_MAXPTRS; i++)
10966  ip->spine[i] = &ip->spine[i - 1];
10967  }
10968  *p = &ip->spine[k - 1];
10969  if (ip->ptr && !ip->shaky)
10970  ip->spine[0] = ip->ptr;
10971  }
10972  else
10973  {
10974  void *q = ip->link;
10975  ip->link = p;
10976  ip->shaky = soap_is_shaky(soap, (void*)p);
10977  *p = q;
10978  }
10979  }
10980  return p;
10981 }
#define SOAP_MAXPTRS
Definition: stdsoap2.h:1232

References DBGLOG, soap_ilist::link, NULL, soap_ilist::ptr, soap_ilist::shaky, soap_ilist::size, soap_enter(), soap_id_nullify(), soap_is_shaky(), soap_lookup(), soap_malloc(), SOAP_MAXPTRS, soap_type_punned(), soap_ilist::spine, TEST(), and soap_ilist::type.

Referenced by soap_in_PointerToSOAP_ENV__Code(), soap_in_PointerToSOAP_ENV__Detail(), soap_in_PointerToSOAP_ENV__Reason(), soap_in_PointerTostring(), soap_instring(), and soap_inwstring().

◆ soap_id_nullify()

SOAP_FMAC1 int SOAP_FMAC2 soap_id_nullify ( struct soap soap,
const char *  id 
)

Definition at line 11182 of file stdsoap2.cpp.

11183 {
11184  int i;
11185  for (i = 0; i < SOAP_IDHASH; i++)
11186  {
11187  struct soap_ilist *ip;
11188  for (ip = soap->iht[i]; ip; ip = ip->next)
11189  {
11190  void *p, *q;
11191  for (p = ip->link; p; p = q)
11192  {
11193  q = *(void**)p;
11194  *(void**)p = NULL;
11195  }
11196  ip->link = NULL;
11197  }
11198  }
11199  soap_strcpy(soap->id, sizeof(soap->id), id);
11200  return soap->error = SOAP_HREF;
11201 }

References soap::error, soap::id, soap::iht, soap_ilist::link, soap_ilist::next, NULL, SOAP_HREF, SOAP_IDHASH, and soap_strcpy.

Referenced by soap_id_enter(), soap_id_forward(), soap_id_lookup(), and soap_resolve().

◆ soap_id_smart()

SOAP_FMAC1 void** SOAP_FMAC2 soap_id_smart ( struct soap soap,
const char *  id,
int  t,
size_t  n 
)

Definition at line 11139 of file stdsoap2.cpp.

11140 {
11141  (void)soap; (void)id; (void)t; (void)n;
11142 #ifndef WITH_NOIDREF
11143  if (id && *id)
11144  {
11145  struct soap_ilist *ip = soap_lookup(soap, id); /* lookup pointer to hash table entry for string id */
11146  if (!ip)
11147  {
11148  ip = soap_enter(soap, id, t, n); /* new hash table entry for string id */
11149  if (!ip)
11150  return NULL;
11151  }
11152  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "New smart shared pointer entry id='%s' type=%d size=%lu smart=%p\n", id, t, (unsigned long)n, ip->smart));
11153  return &ip->smart;
11154  }
11155 #endif
11156  return NULL;
11157 }

References DBGLOG, NULL, soap_ilist::smart, soap_enter(), soap_lookup(), and TEST().

◆ soap_ignore()

SOAP_FMAC1 int SOAP_FMAC2 soap_ignore ( struct soap soap)

Definition at line 15002 of file stdsoap2.cpp.

15003 {
15004  int n = 0;
15005  soap_wchar c;
15006  soap->level++;
15007  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Ignoring XML content at level=%u\n", soap->level));
15008 #ifdef WITH_DOM
15009  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
15010  {
15011  if (!soap_string_in(soap, -1, -1, -1, NULL))
15012  return soap->error;
15013  }
15014  else
15015 #endif
15016  {
15017  for (;;)
15018  {
15019  c = soap_get(soap);
15020  switch (c)
15021  {
15022  case SOAP_TT:
15023  if (n == 0)
15024  goto end;
15025  n--;
15026  break;
15027  case SOAP_LT:
15028  n++;
15029  break;
15030  case '/':
15031  if (n > 0)
15032  {
15033  c = soap_get0(soap);
15034  if (c == '>')
15035  n--;
15036  }
15037  break;
15038  default:
15039  if ((int)c == EOF)
15040  return soap->error = SOAP_EOF;
15041  }
15042  }
15043 end:
15044  soap_unget(soap, c);
15045  }
15046  return soap_element_end_in(soap, NULL);
15047 }

References mpq::c, DBGLOG, soap::dom, soap::error, soap::level, soap::mode, NULL, soap_element_end_in(), SOAP_EOF, soap_get(), soap_get0, SOAP_LT, soap_string_in(), SOAP_TT, soap_unget, SOAP_XML_DOM, and TEST().

Referenced by soap_ignore_element().

◆ soap_inbyte()

SOAP_FMAC1 char* SOAP_FMAC2 soap_inbyte ( struct soap soap,
const char *  tag,
char *  p,
const char *  type,
int  t 
)

Definition at line 16433 of file stdsoap2.cpp.

16434 {
16435  if (soap_element_begin_in(soap, tag, 0, NULL))
16436  return NULL;
16437 #ifndef WITH_LEAN
16438  if (*soap->type
16440  && soap_match_tag(soap, soap->type, ":byte"))
16441  {
16442  soap->error = SOAP_TYPE;
16443  soap_revert(soap);
16444  return NULL;
16445  }
16446 #else
16447  (void)type;
16448 #endif
16449  p = (char*)soap_id_enter(soap, soap->id, p, t, sizeof(char), NULL, NULL, NULL, NULL);
16450  if (!p)
16451  return NULL;
16452  if (*soap->href != '#')
16453  {
16454  int err = soap_s2byte(soap, soap_value(soap), p);
16455  if ((soap->body && soap_element_end_in(soap, tag)) || err)
16456  return NULL;
16457  }
16458  else
16459  {
16460  p = (char*)soap_id_forward(soap, soap->href, p, 0, t, t, sizeof(char), 0, NULL, NULL);
16461  if (soap->body && soap_element_end_in(soap, tag))
16462  return NULL;
16463  }
16464  return p;
16465 }
SOAP_FMAC1 void SOAP_FMAC2 soap_revert(struct soap *soap)
Definition: stdsoap2.cpp:14986
SOAP_FMAC1 int SOAP_FMAC2 soap_s2byte(struct soap *soap, const char *s, char *p)
Definition: stdsoap2.cpp:16412
SOAP_FMAC1 void *SOAP_FMAC2 soap_id_enter(struct soap *soap, const char *id, void *p, int t, size_t n, const char *type, const char *arrayType, void *(*finstantiate)(struct soap *, int, const char *, const char *, size_t *), int(*fbase)(int, int))
Definition: stdsoap2.cpp:11054
SOAP_FMAC1 const char *SOAP_FMAC2 soap_value(struct soap *soap)
Definition: stdsoap2.cpp:19002
SOAP_FMAC1 void *SOAP_FMAC2 soap_id_forward(struct soap *soap, const char *href, void *p, size_t i, int t, int tt, size_t n, unsigned int k, void(*finsert)(struct soap *, int, int, void *, size_t, const void *, void **), int(*fbase)(int, int))
Definition: stdsoap2.cpp:10990

References soap::body, soap::error, soap::href, soap::id, NULL, soap_element_begin_in(), soap_element_end_in(), soap_id_enter(), soap_id_forward(), soap_match_tag(), soap_revert(), soap_s2byte(), SOAP_TYPE, soap_value(), and soap::type.

Referenced by soap_in_byte().

◆ soap_indateTime()

SOAP_FMAC1 time_t* SOAP_FMAC2 soap_indateTime ( struct soap soap,
const char *  tag,
time_t *  p,
const char *  type,
int  t 
)

Definition at line 18822 of file stdsoap2.cpp.

18823 {
18824  if (soap_element_begin_in(soap, tag, 0, NULL))
18825  return NULL;
18826  if (*soap->type
18828  && soap_match_tag(soap, soap->type, ":dateTime"))
18829  {
18830  soap->error = SOAP_TYPE;
18831  soap_revert(soap);
18832  return NULL;
18833  }
18834  p = (time_t*)soap_id_enter(soap, soap->id, p, t, sizeof(time_t), NULL, NULL, NULL, NULL);
18835  if (!p)
18836  return NULL;
18837  if (*soap->href != '#')
18838  {
18839  int err = soap_s2dateTime(soap, soap_value(soap), p);
18840  if ((soap->body && soap_element_end_in(soap, tag)) || err)
18841  return NULL;
18842  }
18843  else
18844  {
18845  p = (time_t*)soap_id_forward(soap, soap->href, p, 0, t, t, sizeof(time_t), 0, NULL, NULL);
18846  if (soap->body && soap_element_end_in(soap, tag))
18847  return NULL;
18848  }
18849  return p;
18850 }
SOAP_FMAC1 int SOAP_FMAC2 soap_s2dateTime(struct soap *soap, const char *s, time_t *p)
Definition: stdsoap2.cpp:18686

References soap::body, soap::error, soap::href, soap::id, NULL, soap_element_begin_in(), soap_element_end_in(), soap_id_enter(), soap_id_forward(), soap_match_tag(), soap_revert(), soap_s2dateTime(), SOAP_TYPE, soap_value(), and soap::type.

◆ soap_indouble()

SOAP_FMAC1 double* SOAP_FMAC2 soap_indouble ( struct soap soap,
const char *  tag,
double *  p,
const char *  type,
int  t 
)

Definition at line 16887 of file stdsoap2.cpp.

16888 {
16889  if (soap_element_begin_in(soap, tag, 0, NULL))
16890  return NULL;
16891 #ifndef WITH_LEAN
16892  if (*soap->type != '\0' && soap_isnumeric(soap, type))
16893  return NULL;
16894 #else
16895  (void)type;
16896 #endif
16897  p = (double*)soap_id_enter(soap, soap->id, p, t, sizeof(double), NULL, NULL, NULL, NULL);
16898  if (!p)
16899  return NULL;
16900  if (*soap->href != '#')
16901  {
16902  int err = soap_s2double(soap, soap_value(soap), p);
16903  if ((soap->body && soap_element_end_in(soap, tag)) || err)
16904  return NULL;
16905  }
16906  else
16907  {
16908  p = (double*)soap_id_forward(soap, soap->href, p, 0, t, t, sizeof(double), 0, NULL, NULL);
16909  if (soap->body && soap_element_end_in(soap, tag))
16910  return NULL;
16911  }
16912  return p;
16913 }
SOAP_FMAC1 int SOAP_FMAC2 soap_s2double(struct soap *soap, const char *s, double *p)
Definition: stdsoap2.cpp:16817
static int soap_isnumeric(struct soap *, const char *)
Definition: stdsoap2.cpp:16701

References soap::body, soap::href, soap::id, NULL, soap_element_begin_in(), soap_element_end_in(), soap_id_enter(), soap_id_forward(), soap_isnumeric(), soap_s2double(), soap_value(), and soap::type.

◆ soap_infloat()

SOAP_FMAC1 float* SOAP_FMAC2 soap_infloat ( struct soap soap,
const char *  tag,
float *  p,
const char *  type,
int  t 
)

Definition at line 16734 of file stdsoap2.cpp.

16735 {
16736  if (soap_element_begin_in(soap, tag, 0, NULL))
16737  return NULL;
16738 #ifndef WITH_LEAN
16739  if (*soap->type != '\0' && soap_isnumeric(soap, type))
16740  return NULL;
16741 #else
16742  (void)type;
16743 #endif
16744  p = (float*)soap_id_enter(soap, soap->id, p, t, sizeof(float), NULL, NULL, NULL, NULL);
16745  if (!p)
16746  return NULL;
16747  if (*soap->href != '#')
16748  {
16749  int err = soap_s2float(soap, soap_value(soap), p);
16750  if ((soap->body && soap_element_end_in(soap, tag)) || err)
16751  return NULL;
16752  }
16753  else
16754  {
16755  p = (float*)soap_id_forward(soap, soap->href, p, 0, t, t, sizeof(float), 0, NULL, NULL);
16756  if (soap->body && soap_element_end_in(soap, tag))
16757  return NULL;
16758  }
16759  return p;
16760 }
SOAP_FMAC1 int SOAP_FMAC2 soap_s2float(struct soap *soap, const char *s, float *p)
Definition: stdsoap2.cpp:16606

References soap::body, soap::href, soap::id, NULL, soap_element_begin_in(), soap_element_end_in(), soap_id_enter(), soap_id_forward(), soap_isnumeric(), soap_s2float(), soap_value(), and soap::type.

◆ soap_inint()

SOAP_FMAC1 int* SOAP_FMAC2 soap_inint ( struct soap soap,
const char *  tag,
int *  p,
const char *  type,
int  t 
)

Definition at line 16152 of file stdsoap2.cpp.

16153 {
16154  if (soap_element_begin_in(soap, tag, 0, NULL))
16155  return NULL;
16156 #ifndef WITH_LEAN
16157  if (*soap->type
16159  && soap_match_tag(soap, soap->type, ":int")
16160  && soap_match_tag(soap, soap->type, ":short")
16161  && soap_match_tag(soap, soap->type, ":byte"))
16162  {
16163  soap->error = SOAP_TYPE;
16164  soap_revert(soap);
16165  return NULL;
16166  }
16167 #else
16168  (void)type;
16169 #endif
16170  p = (int*)soap_id_enter(soap, soap->id, p, t, sizeof(int), NULL, NULL, NULL, NULL);
16171  if (!p)
16172  return NULL;
16173  if (*soap->href != '#')
16174  {
16175  int err = soap_s2int(soap, soap_value(soap), p);
16176  if ((soap->body && soap_element_end_in(soap, tag)) || err)
16177  return NULL;
16178  }
16179  else
16180  {
16181  p = (int*)soap_id_forward(soap, soap->href, p, 0, t, t, sizeof(int), 0, NULL, NULL);
16182  if (soap->body && soap_element_end_in(soap, tag))
16183  return NULL;
16184  }
16185  return p;
16186 }
SOAP_FMAC1 int SOAP_FMAC2 soap_s2int(struct soap *soap, const char *s, int *p)
Definition: stdsoap2.cpp:16117

References soap::body, soap::error, soap::href, soap::id, NULL, soap_element_begin_in(), soap_element_end_in(), soap_id_enter(), soap_id_forward(), soap_match_tag(), soap_revert(), soap_s2int(), SOAP_TYPE, soap_value(), and soap::type.

Referenced by soap_in_int().

◆ soap_init()

SOAP_FMAC1 void SOAP_FMAC2 soap_versioning() soap_init ( struct soap soap,
soap_mode  imode,
soap_mode  omode 
)

Definition at line 12050 of file stdsoap2.cpp.

12051 {
12052  size_t i;
12053  soap->state = SOAP_INIT;
12054 #ifdef SOAP_MEM_DEBUG
12055  soap_init_mht(soap);
12056 #endif
12057 #ifdef SOAP_DEBUG
12058  soap_init_logs(soap);
12059 #endif
12060 #ifdef TANDEM_NONSTOP
12061  soap_set_test_logfile(soap, "TESTLOG");
12062  soap_set_sent_logfile(soap, "SENTLOG");
12063  soap_set_recv_logfile(soap, "RECVLOG");
12064 #else
12065  soap_set_test_logfile(soap, "TEST.log");
12066  soap_set_sent_logfile(soap, "SENT.log");
12067  soap_set_recv_logfile(soap, "RECV.log");
12068 #endif
12069 #ifdef WITH_SELF_PIPE
12070  pipe(soap->pipe_fd);
12071  SOAP_SOCKNONBLOCK(soap->pipe_fd[0])
12072  SOAP_SOCKNONBLOCK(soap->pipe_fd[1])
12073 #endif
12074  soap->version = 0;
12075  soap->imode = imode;
12076  soap->omode = omode;
12077  soap->mode = imode;
12078  soap->plugins = NULL;
12079  soap->user = NULL;
12080  for (i = 0; i < sizeof(soap->data)/sizeof(*soap->data); i++)
12081  soap->data[i] = NULL;
12082  soap->bearer = NULL;
12083  soap->userid = NULL;
12084  soap->passwd = NULL;
12085  soap->authrealm = NULL;
12086 #ifdef WITH_NTLM
12088 #endif
12089 #ifndef WITH_NOHTTP
12090  soap->fpost = http_post;
12091  soap->fget = http_get;
12092  soap->fput = http_put;
12093  soap->fpatch = http_patch;
12094  soap->fdel = http_del;
12095  soap->fopt = http_200;
12096  soap->fhead = http_200;
12097  soap->fform = NULL;
12100  soap->fparse = http_parse;
12102 #endif
12103  soap->fheader = NULL;
12104  soap->fconnect = NULL;
12105  soap->fdisconnect = NULL;
12106 #ifndef WITH_NOIO
12107  soap->ipv6_multicast_if = 0; /* in_addr_t value */
12108  soap->ipv4_multicast_if = NULL; /* points to struct in_addr or in_addr_t */
12109  soap->ipv4_multicast_ttl = 0; /* 0: use default */
12110  soap->client_addr = NULL; /* client address (IPv4 or IPv6 or host name) to bind before connect, NULL for none */
12111  soap->client_addr_ipv6 = NULL; /* client address IPv6 or host name to bind before connect, NULL for none */
12112  soap->client_port = -1; /* client port to bind before connect, -1 for none */
12113  soap->client_interface = NULL; /* client interface address, NULL for none */
12114 #ifndef WITH_IPV6
12116 #else
12117  soap->fresolve = NULL;
12118 #endif
12119  soap->faccept = tcp_accept;
12120  soap->fopen = tcp_connect;
12124  soap->fsend = fsend;
12125  soap->frecv = frecv;
12126  soap->fpoll = soap_poll;
12127 #else
12128  soap->fopen = NULL;
12129  soap->fclose = NULL;
12130  soap->fpoll = NULL;
12131 #endif
12132  soap->fseterror = NULL;
12133  soap->fignore = NULL;
12134  soap->fserveloop = NULL;
12135  soap->fplugin = fplugin;
12136 #ifndef WITH_LEANER
12137  soap->fsvalidate = NULL;
12138  soap->fwvalidate = NULL;
12139  soap->feltbegin = NULL;
12140  soap->feltendin = NULL;
12141  soap->feltbegout = NULL;
12142  soap->feltendout = NULL;
12145  soap->fpreparesend = NULL;
12146  soap->fpreparerecv = NULL;
12149  soap->ffiltersend = NULL;
12150  soap->ffilterrecv = NULL;
12151  soap->fdimereadopen = NULL;
12155  soap->fdimeread = NULL;
12156  soap->fdimewrite = NULL;
12157  soap->fmimereadopen = NULL;
12161  soap->fmimeread = NULL;
12162  soap->fmimewrite = NULL;
12163 #endif
12164  soap->float_format = "%.9G"; /* Alternative: use "%G" */
12165  soap->double_format = "%.17lG"; /* Alternative: use "%lG" */
12166  soap->long_double_format = NULL; /* Defined in custom serializer custom/long_double.c */
12167  soap->dime_id_format = "cid:id%d"; /* default DIME id format for int id index */
12168  soap->recv_maxlength = 0x7FFFFFFF; /* default max length of messages received (2GB) */
12169  soap->recv_timeout = 0;
12170  soap->send_timeout = 0;
12171  soap->transfer_timeout = 0;
12172  soap->connect_timeout = 0;
12173  soap->accept_timeout = 0;
12174  soap->socket_flags = 0;
12175  soap->connect_flags = 0;
12176  soap->connect_retry = 0;
12177  soap->bind_flags = 0;
12178 #ifdef WITH_IPV6_V6ONLY
12179  soap->bind_inet6 = 1;
12180  soap->bind_v6only = 1;
12181 #else
12182  soap->bind_inet6 = 0;
12183  soap->bind_v6only = 0;
12184 #endif
12185  soap->accept_flags = 0;
12186 #ifdef WIN32
12187  soap->sndbuf = SOAP_BUFLEN + 1; /* this size speeds up windows xfer */
12188  soap->rcvbuf = SOAP_BUFLEN + 1;
12189 #else
12190  soap->sndbuf = SOAP_BUFLEN;
12191  soap->rcvbuf = SOAP_BUFLEN;
12192 #endif
12193  soap->linger_time = 0;
12197  soap->http_version = "1.1";
12198  soap->proxy_http_version = "1.0";
12199  soap->http_content = NULL;
12201  soap->actor = NULL;
12202  soap->lang = "en";
12203  soap->keep_alive = 0;
12204  soap->tcp_keep_alive = 0;
12205  soap->tcp_keep_idle = 0;
12206  soap->tcp_keep_intvl = 0;
12207  soap->tcp_keep_cnt = 0;
12209  soap->ip = 0;
12210  soap->ip6[0] = 0;
12211  soap->ip6[1] = 0;
12212  soap->ip6[2] = 0;
12213  soap->ip6[3] = 0;
12214  soap->labbuf = NULL;
12215  soap->lablen = 0;
12216  soap->labidx = 0;
12217  soap->encodingStyle = NULL;
12218 #ifndef WITH_NONAMESPACES
12220 #else
12221  soap->namespaces = NULL;
12222 #endif
12224  soap->nlist = NULL;
12225  soap->blist = NULL;
12226  soap->clist = NULL;
12227  soap->alist = NULL;
12228  soap->shaky = 0;
12229  soap->attributes = NULL;
12230  soap->header = NULL;
12231  soap->fault = NULL;
12236  soap->os = NULL;
12237  soap->is = NULL;
12238 #ifndef WITH_LEANER
12239  soap->dom = NULL;
12240  soap->dime.list = NULL;
12241  soap->dime.first = NULL;
12242  soap->dime.last = NULL;
12243  soap->mime.list = NULL;
12244  soap->mime.first = NULL;
12245  soap->mime.last = NULL;
12246  soap->mime.boundary = NULL;
12247  soap->mime.start = NULL;
12248  soap->xlist = NULL;
12249 #endif
12250 #ifndef UNDER_CE
12251  soap->recvfd = 0;
12252  soap->sendfd = 1;
12253 #else
12254  soap->recvfd = stdin;
12255  soap->sendfd = stdout;
12256 #endif
12257  soap->tag[0] = '\0';
12258  soap->id[0] = '\0';
12259  soap->href[0] = '\0';
12260  soap->type[0] = '\0';
12261  soap->arrayType[0] = '\0';
12262  soap->arraySize[0] = '\0';
12263  soap->arrayOffset[0] = '\0';
12264  soap->endpoint[0] = '\0';
12265  soap->host[0] = '\0';
12266  soap->path[0] = '\0';
12267  soap->port = 0;
12268  soap->override_host = NULL;
12269  soap->override_port = 0;
12270  soap->action = NULL;
12271  soap->proxy_host = NULL;
12272  soap->proxy_port = 8080;
12273  soap->proxy_userid = NULL;
12274  soap->proxy_passwd = NULL;
12275  soap->proxy_from = NULL;
12276  soap->origin = NULL;
12277  soap->cors_origin = NULL;
12278  soap->cors_allow = "*";
12279  soap->cors_method = NULL;
12280  soap->cors_header = NULL;
12281  soap->cors_methods = NULL;
12282  soap->cors_headers = NULL;
12283  soap->x_frame_options = "SAMEORIGIN";
12284  soap->prolog = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
12288  soap->d_stream = NULL;
12289  soap->z_buf = NULL;
12290  soap->z_level = 6;
12291  soap->z_dict = NULL;
12292  soap->z_dict_len = 0;
12293 #ifndef WITH_LEAN
12294  soap->wsuid = NULL;
12295  soap->c14nexclude = NULL;
12296  soap->c14ninclude = NULL;
12297  soap->cookies = NULL;
12298  soap->cookie_domain = NULL;
12299  soap->cookie_path = NULL;
12300  soap->cookie_max = 32;
12301 #endif
12302 #ifdef WMW_RPM_IO
12303  soap->rpmreqid = NULL;
12304 #endif
12305 #ifndef WITH_NOIDREF
12307 #endif
12309 #ifdef WITH_OPENSSL
12310  if (!soap_ssl_init_done)
12311  soap_ssl_init();
12312  soap->fsslauth = ssl_auth_init;
12313  soap->fsslverify = NULL;
12314  soap->bio = NULL;
12315  soap->ssl = NULL;
12316  soap->ctx = NULL;
12317  soap->session = NULL;
12318  soap->session_host[0] = '\0';
12319  soap->session_port = 443;
12321  soap->keyfile = NULL;
12322  soap->keyid = NULL;
12323  soap->password = NULL;
12324  soap->cafile = NULL;
12325  soap->capath = NULL;
12326  soap->crlfile = NULL;
12327  soap->dhfile = NULL;
12328  soap->randfile = NULL;
12329 #endif
12330 #ifdef WITH_GNUTLS
12331  if (!soap_ssl_init_done)
12332  soap_ssl_init();
12333  soap->fsslauth = ssl_auth_init;
12334  soap->fsslverify = NULL;
12335  soap->xcred = NULL;
12336  soap->acred = NULL;
12337  soap->cache = NULL;
12338  soap->session = NULL;
12340  soap->keyfile = NULL;
12341  soap->keyid = NULL;
12342  soap->password = NULL;
12343  soap->cafile = NULL;
12344  soap->capath = NULL;
12345  soap->crlfile = NULL;
12346  soap->dh_params = NULL;
12347  soap->rsa_params = NULL;
12348 #endif
12349 #ifdef WITH_SYSTEMSSL
12350  soap->fsslauth = ssl_auth_init;
12351  soap->fsslverify = NULL;
12352  soap->bio = NULL;
12353  soap->ssl = (gsk_handle)NULL;
12354  soap->ctx = (gsk_handle)NULL;
12355  soap->session = NULL;
12357  soap->keyfile = NULL;
12358  soap->keyid = NULL;
12359  soap->password = NULL;
12360  soap->cafile = NULL;
12361  soap->capath = NULL;
12362  soap->crlfile = NULL;
12363  soap->dhfile = NULL;
12364  soap->randfile = NULL;
12365 #endif
12366  soap->c_locale = NULL;
12367  soap->buflen = 0;
12368  soap->bufidx = 0;
12369 #ifndef WITH_LEANER
12370  soap->dime.chunksize = 0;
12371  soap->dime.buflen = 0;
12372 #endif
12373  soap->other = 0;
12374  soap->root = -1;
12375  soap->null = 0;
12376  soap->position = 0;
12377  soap->encoding = 0;
12378  soap->mustUnderstand = 0;
12379  soap->ns = 0;
12380  soap->part = SOAP_END;
12381  soap->event = 0;
12382  soap->evlev = 0;
12383  soap->alloced = 0;
12384  soap->count = 0;
12385  soap->length = 0;
12386  soap->cdata = 0;
12387  soap->peeked = 0;
12388  soap->ahead = 0;
12389  soap->idnum = 0;
12390  soap->level = 0;
12391  soap->status = 0;
12392  soap->error = SOAP_OK;
12393  soap->errmode = 0;
12394  soap->errnum = 0;
12395 }
#define SOAP_MAXLEVEL
Definition: stdsoap2.h:1313
#define SOAP_MAXOCCURS
Definition: stdsoap2.h:1323
SOAP_FMAC1 void SOAP_FMAC2 soap_ssl_init(void)
SOAP_NMAC struct Namespace namespaces[]
Definition: ACSoap.cpp:142
#define SOAP_SSL_DEFAULT
Definition: stdsoap2.h:1762
#define SOAP_BUFLEN
Definition: stdsoap2.h:1170
#define SOAP_MAXKEEPALIVE
Definition: stdsoap2.h:1267
#define SOAP_MAXLENGTH
Definition: stdsoap2.h:1318
int proxy_port
Definition: stdsoap2.h:2863
const char * capath
Definition: stdsoap2.h:2954
const char * proxy_http_version
Definition: stdsoap2.h:2861
const char * override_host
Definition: stdsoap2.h:2853
const char * keyfile
Definition: stdsoap2.h:2950
const char * cafile
Definition: stdsoap2.h:2953
unsigned int ipv6_multicast_if
Definition: stdsoap2.h:2898
int cookie_max
Definition: stdsoap2.h:2896
const char * origin
Definition: stdsoap2.h:2867
const char * http_version
Definition: stdsoap2.h:2697
int(* fconnect)(struct soap *, const char *, const char *, int)
Definition: stdsoap2.h:2744
size_t(* fdimeread)(struct soap *, void *, char *, size_t)
Definition: stdsoap2.h:2778
unsigned short ssl_flags
Definition: stdsoap2.h:2949
const char * proxy_from
Definition: stdsoap2.h:2866
const char * lang
Definition: stdsoap2.h:2702
const char * cors_method
Definition: stdsoap2.h:2870
const char * crlfile
Definition: stdsoap2.h:2955
void * c_locale
Definition: stdsoap2.h:2961
const char * x_frame_options
Definition: stdsoap2.h:2874
void *(* fmimewriteopen)(struct soap *, void *, const char *, const char *, const char *, enum soap_mime_encoding)
Definition: stdsoap2.h:2781
const char * password
Definition: stdsoap2.h:2952
const char * proxy_userid
Definition: stdsoap2.h:2864
const char * client_addr_ipv6
Definition: stdsoap2.h:2902
void(* fdimereadclose)(struct soap *, void *)
Definition: stdsoap2.h:2776
void * user
Definition: stdsoap2.h:2719
int override_port
Definition: stdsoap2.h:2854
const char * cors_allow
Definition: stdsoap2.h:2869
const char * client_addr
Definition: stdsoap2.h:2901
int session_port
Definition: stdsoap2.h:2957
int client_port
Definition: stdsoap2.h:2903
unsigned char ipv4_multicast_ttl
Definition: stdsoap2.h:2900
const char * client_interface
Definition: stdsoap2.h:2904
char session_host[SOAP_TAGLEN]
Definition: stdsoap2.h:2956
void *(* fdimereadopen)(struct soap *, void *, const char *, const char *, const char *)
Definition: stdsoap2.h:2774
void * fsslverify
Definition: stdsoap2.h:2941
void *(* fmimereadopen)(struct soap *, void *, const char *, const char *, const char *)
Definition: stdsoap2.h:2780
const char * proxy_host
Definition: stdsoap2.h:2862
void(* fmimereadclose)(struct soap *, void *)
Definition: stdsoap2.h:2782
char arrayOffset[SOAP_TAGLEN]
Definition: stdsoap2.h:2828
void * fsslauth
Definition: stdsoap2.h:2940
int(* fmimewrite)(struct soap *, void *, const char *, size_t)
Definition: stdsoap2.h:2785
char * ipv4_multicast_if
Definition: stdsoap2.h:2899
struct soap_cookie * cookies
Definition: stdsoap2.h:2893
const char * keyid
Definition: stdsoap2.h:2951
const char * proxy_passwd
Definition: stdsoap2.h:2865
const char * long_double_format
Definition: stdsoap2.h:2673
const char * cors_origin
Definition: stdsoap2.h:2868
char arraySize[SOAP_TAGLEN]
Definition: stdsoap2.h:2827
char arrayType[SOAP_TAGLEN]
Definition: stdsoap2.h:2826
void(* fmimewriteclose)(struct soap *, void *)
Definition: stdsoap2.h:2783
const char * cors_methods
Definition: stdsoap2.h:2872
size_t(* fmimeread)(struct soap *, void *, char *, size_t)
Definition: stdsoap2.h:2784
const char * cookie_domain
Definition: stdsoap2.h:2894
void * data[4]
Definition: stdsoap2.h:2720
const char * cors_headers
Definition: stdsoap2.h:2873
const char * http_extra_header
Definition: stdsoap2.h:2699
const char * cors_header
Definition: stdsoap2.h:2871
const char * cookie_path
Definition: stdsoap2.h:2895

References soap::accept_flags, soap::accept_timeout, soap::action, soap::actor, soap::ahead, soap::alist, soap::alloced, soap::arrayOffset, soap::arraySize, soap::arrayType, soap::attributes, soap::authrealm, soap::bearer, soap::bind_flags, soap::bind_inet6, soap::bind_v6only, soap::bio, soap::blist, soap_mime::boundary, soap::bufidx, soap_dime::buflen, soap::buflen, soap::c14nexclude, soap::c14ninclude, soap::c_locale, soap::cafile, soap::capath, soap::cdata, soap_dime::chunksize, soap::client_addr, soap::client_addr_ipv6, soap::client_interface, soap::client_port, soap::clist, soap::connect_flags, soap::connect_retry, soap::connect_timeout, soap::cookie_domain, soap::cookie_max, soap::cookie_path, soap::cookies, soap::cors_allow, soap::cors_header, soap::cors_headers, soap::cors_method, soap::cors_methods, soap::cors_origin, soap::count, soap::crlfile, soap::ctx, soap::d_stream, soap::data, soap::dh_params, soap::dime, soap::dime_id_format, soap::dom, soap::double_format, soap::encoding, soap::encodingStyle, endif(), soap::endpoint, soap::errmode, soap::errnum, soap::error, soap::event, soap::evlev, soap::faccept, soap::fault, soap::fclose, soap::fclosesocket, soap::fconnect, soap::fdel, soap::fdimeread, soap::fdimereadclose, soap::fdimereadopen, soap::fdimewrite, soap::fdimewriteclose, soap::fdimewriteopen, soap::fdisconnect, soap::feltbegin, soap::feltbegout, soap::feltendin, soap::feltendout, soap::ffilterrecv, soap::ffiltersend, soap::fform, soap::fget, soap::fhead, soap::fheader, soap::fignore, soap_dime::first, soap_mime::first, soap::float_format, soap::fmimeread, soap::fmimereadclose, soap::fmimereadopen, soap::fmimewrite, soap::fmimewriteclose, soap::fmimewriteopen, soap::fopen, soap::fopt, soap::fparse, soap::fparsehdr, soap::fpatch, fplugin(), soap::fplugin, soap::fpoll, soap::fpost, soap::fposthdr, soap::fpreparefinalrecv, soap::fpreparefinalsend, soap::fprepareinitrecv, soap::fprepareinitsend, soap::fpreparerecv, soap::fpreparesend, soap::fput, frecv(), soap::frecv, soap::fresolve, soap::fresponse, fsend(), soap::fsend, soap::fserveloop, soap::fseterror, soap::fshutdownsocket, soap::fsslauth, soap::fsslverify, soap::fsvalidate, soap::fwvalidate, soap::header, soap::host, soap::href, http_200(), soap::http_content, http_del(), soap::http_extra_header, http_get(), http_parse(), http_parse_header(), http_patch(), http_post(), http_post_header(), http_put(), http_response(), soap::http_version, soap::id, soap::idnum, soap::imode, soap::ip, soap::ip6, soap::ipv4_multicast_if, soap::ipv4_multicast_ttl, soap::ipv6_multicast_if, soap::is, soap::keep_alive, soap::keyfile, soap::keyid, soap::labbuf, soap::labidx, soap::lablen, soap::lang, soap_dime::last, soap_mime::last, soap::length, soap::level, soap::linger_time, soap_dime::list, soap_mime::list, soap::local_namespaces, soap::long_double_format, soap::master, soap::max_keep_alive, soap::maxlength, soap::maxlevel, soap::maxoccurs, soap::mime, soap::mode, soap::mustUnderstand, soap::namespaces, namespaces, soap::nlist, soap::ns, soap::ntlm_challenge, soap::null, NULL, soap::omode, soap::origin, soap::os, soap::other, soap::override_host, soap::override_port, soap::part, soap::passwd, soap::password, soap::path, soap::peeked, soap::plugins, soap::port, soap::position, soap::prolog, soap::proxy_from, soap::proxy_host, soap::proxy_http_version, soap::proxy_passwd, soap::proxy_port, soap::proxy_userid, soap::rcvbuf, soap::recv_maxlength, soap::recv_timeout, soap::recvfd, soap::recvsk, soap::root, soap::rsa_params, soap::send_timeout, soap::sendfd, soap::sendsk, soap::session, soap::session_host, soap::session_port, soap::shaky, soap::sndbuf, SOAP_BUFLEN, SOAP_END, SOAP_INIT, soap_init_iht(), soap_init_pht(), SOAP_INVALID_SOCKET, SOAP_MAXKEEPALIVE, SOAP_MAXLENGTH, SOAP_MAXLEVEL, SOAP_MAXOCCURS, SOAP_OK, soap_poll(), soap_set_recv_logfile(), soap_set_sent_logfile(), soap_set_test_logfile(), SOAP_SOCKNONBLOCK, SOAP_SSL_DEFAULT, soap_ssl_init(), SOAP_ZLIB_NONE, soap::socket, soap::socket_flags, soap::ssl, soap::ssl_flags, soap_mime::start, soap::state, soap::status, soap::tag, tcp_accept(), tcp_closesocket(), tcp_connect(), tcp_disconnect(), tcp_gethost(), soap::tcp_keep_alive, soap::tcp_keep_cnt, soap::tcp_keep_idle, soap::tcp_keep_intvl, tcp_shutdownsocket(), soap::transfer_timeout, soap::type, soap::user, soap::userid, soap::version, soap::wsuid, soap::x_frame_options, soap::xlist, soap::z_buf, soap::z_dict, soap::z_dict_len, soap::z_level, soap::zlib_in, soap::zlib_out, and soap::zlib_state.

Referenced by soap_initialize(), and soap_new().

◆ soap_initialize()

SOAP_FMAC1 void SOAP_FMAC2 soap_initialize ( struct soap soap)

Definition at line 12040 of file stdsoap2.cpp.

12041 {
12043 }
SOAP_FMAC1 void SOAP_FMAC2 soap_versioning() soap_init(struct soap *soap, soap_mode imode, soap_mode omode)
Definition: stdsoap2.cpp:12050

References soap, soap_init(), SOAP_IO_DEFAULT, and soap_versioning.

◆ soap_inliteral()

SOAP_FMAC1 char** SOAP_FMAC2 soap_inliteral ( struct soap soap,
const char *  tag,
char **  p 
)

Definition at line 18876 of file stdsoap2.cpp.

18877 {
18878  if (soap_element_begin_in(soap, tag, 1, NULL))
18879  {
18880  if (soap->error != SOAP_NO_TAG || soap_peek(soap) == SOAP_TT)
18881  return NULL;
18882  soap->error = SOAP_OK;
18883  }
18884  if (!p)
18885  {
18886  p = (char**)soap_malloc(soap, sizeof(char*));
18887  if (!p)
18888  return NULL;
18889  }
18890  if (soap->body || (tag && *tag == '-'))
18891  {
18892  if (tag && *tag != '-')
18893  *p = soap_string_in(soap, -1, -1, -1, NULL);
18894  else
18895  *p = soap_string_in(soap, 0, -1, -1, NULL);
18896  if (!*p)
18897  return NULL;
18898  if (!**p && tag && *tag == '-')
18899  {
18900  soap->error = SOAP_NO_TAG;
18901  return NULL;
18902  }
18903  }
18904  else if (soap->null)
18905  {
18906  *p = NULL;
18907  }
18908  else
18909  {
18910  *p = soap_strdup(soap, SOAP_STR_EOS);
18911  }
18912  if (soap->body && soap_element_end_in(soap, tag))
18913  return NULL;
18914  return p;
18915 }
#define soap_peek(soap)
Definition: stdsoap2.h:3060

References soap::body, soap::error, soap::null, NULL, soap_element_begin_in(), soap_element_end_in(), soap_malloc(), SOAP_NO_TAG, SOAP_OK, soap_peek, SOAP_STR_EOS, soap_strdup(), soap_string_in(), and SOAP_TT.

Referenced by soap_in_SOAP_ENV__Detail(), and soap_recv_fault().

◆ soap_inlong()

SOAP_FMAC1 long* SOAP_FMAC2 soap_inlong ( struct soap soap,
const char *  tag,
long *  p,
const char *  type,
int  t 
)

Definition at line 16247 of file stdsoap2.cpp.

16248 {
16249  if (soap_element_begin_in(soap, tag, 0, NULL))
16250  return NULL;
16251 #ifndef WITH_LEAN
16252  if (*soap->type
16254  && soap_match_tag(soap, soap->type, ":int")
16255  && soap_match_tag(soap, soap->type, ":short")
16256  && soap_match_tag(soap, soap->type, ":byte"))
16257  {
16258  soap->error = SOAP_TYPE;
16259  soap_revert(soap);
16260  return NULL;
16261  }
16262 #else
16263  (void)type;
16264 #endif
16265  p = (long*)soap_id_enter(soap, soap->id, p, t, sizeof(long), NULL, NULL, NULL, NULL);
16266  if (!p)
16267  return NULL;
16268  if (*soap->href != '#')
16269  {
16270  int err = soap_s2long(soap, soap_value(soap), p);
16271  if ((soap->body && soap_element_end_in(soap, tag)) || err)
16272  return NULL;
16273  }
16274  else
16275  {
16276  p = (long*)soap_id_forward(soap, soap->href, p, 0, t, t, sizeof(long), 0, NULL, NULL);
16277  if (soap->body && soap_element_end_in(soap, tag))
16278  return NULL;
16279  }
16280  return p;
16281 }
SOAP_FMAC1 int SOAP_FMAC2 soap_s2long(struct soap *soap, const char *s, long *p)
Definition: stdsoap2.cpp:16217

References soap::body, soap::error, soap::href, soap::id, NULL, soap_element_begin_in(), soap_element_end_in(), soap_id_enter(), soap_id_forward(), soap_match_tag(), soap_revert(), soap_s2long(), SOAP_TYPE, soap_value(), and soap::type.

◆ soap_inLONG64()

SOAP_FMAC1 LONG64* SOAP_FMAC2 soap_inLONG64 ( struct soap soap,
const char *  tag,
LONG64 p,
const char *  type,
int  t 
)

Definition at line 16342 of file stdsoap2.cpp.

16343 {
16344  if (soap_element_begin_in(soap, tag, 0, NULL))
16345  return NULL;
16346 #ifndef WITH_LEAN
16347  if (*soap->type
16349  && soap_match_tag(soap, soap->type, ":integer")
16350  && soap_match_tag(soap, soap->type, ":positiveInteger")
16351  && soap_match_tag(soap, soap->type, ":negativeInteger")
16352  && soap_match_tag(soap, soap->type, ":nonPositiveInteger")
16353  && soap_match_tag(soap, soap->type, ":nonNegativeInteger")
16354  && soap_match_tag(soap, soap->type, ":long")
16355  && soap_match_tag(soap, soap->type, ":int")
16356  && soap_match_tag(soap, soap->type, ":short")
16357  && soap_match_tag(soap, soap->type, ":byte"))
16358  {
16359  soap->error = SOAP_TYPE;
16360  soap_revert(soap);
16361  return NULL;
16362  }
16363 #else
16364  (void)type;
16365 #endif
16366  p = (LONG64*)soap_id_enter(soap, soap->id, p, t, sizeof(LONG64), NULL, NULL, NULL, NULL);
16367  if (!p)
16368  return NULL;
16369  if (*soap->href != '#')
16370  {
16371  int err = soap_s2LONG64(soap, soap_value(soap), p);
16372  if ((soap->body && soap_element_end_in(soap, tag)) || err)
16373  return NULL;
16374  }
16375  else
16376  {
16377  p = (LONG64*)soap_id_forward(soap, soap->href, p, 0, t, t, sizeof(LONG64), 0, NULL, NULL);
16378  if (soap->body && soap_element_end_in(soap, tag))
16379  return NULL;
16380  }
16381  return p;
16382 }
SOAP_FMAC1 int SOAP_FMAC2 soap_s2LONG64(struct soap *soap, const char *s, LONG64 *p)
Definition: stdsoap2.cpp:16312

References soap::body, soap::error, soap::href, soap::id, LONG64, NULL, soap_element_begin_in(), soap_element_end_in(), soap_id_enter(), soap_id_forward(), soap_match_tag(), soap_revert(), soap_s2LONG64(), SOAP_TYPE, soap_value(), and soap::type.

◆ soap_inshort()

SOAP_FMAC1 short* SOAP_FMAC2 soap_inshort ( struct soap soap,
const char *  tag,
short *  p,
const char *  type,
int  t 
)

Definition at line 16516 of file stdsoap2.cpp.

16517 {
16518  if (soap_element_begin_in(soap, tag, 0, NULL))
16519  return NULL;
16520 #ifndef WITH_LEAN
16521  if (*soap->type
16523  && soap_match_tag(soap, soap->type, ":short")
16524  && soap_match_tag(soap, soap->type, ":byte"))
16525  {
16526  soap->error = SOAP_TYPE;
16527  soap_revert(soap);
16528  return NULL;
16529  }
16530 #else
16531  (void)type;
16532 #endif
16533  p = (short*)soap_id_enter(soap, soap->id, p, t, sizeof(short), NULL, NULL, NULL, NULL);
16534  if (!p)
16535  return NULL;
16536  if (*soap->href != '#')
16537  {
16538  int err = soap_s2short(soap, soap_value(soap), p);
16539  if ((soap->body && soap_element_end_in(soap, tag)) || err)
16540  return NULL;
16541  }
16542  else
16543  {
16544  p = (short*)soap_id_forward(soap, soap->href, p, 0, t, t, sizeof(short), 0, NULL, NULL);
16545  if (soap->body && soap_element_end_in(soap, tag))
16546  return NULL;
16547  }
16548  return p;
16549 }
SOAP_FMAC1 int SOAP_FMAC2 soap_s2short(struct soap *soap, const char *s, short *p)
Definition: stdsoap2.cpp:16495

References soap::body, soap::error, soap::href, soap::id, NULL, soap_element_begin_in(), soap_element_end_in(), soap_id_enter(), soap_id_forward(), soap_match_tag(), soap_revert(), soap_s2short(), SOAP_TYPE, soap_value(), and soap::type.

◆ soap_instring()

SOAP_FMAC1 char** SOAP_FMAC2 soap_instring ( struct soap soap,
const char *  tag,
char **  p,
const char *  type,
int  t,
int  flag,
long  minlen,
long  maxlen,
const char *  pattern 
)

Definition at line 18300 of file stdsoap2.cpp.

18301 {
18302  (void)type;
18303  if (soap_element_begin_in(soap, tag, 1, NULL))
18304  {
18305  if (!tag || *tag != '-' || soap->error != SOAP_NO_TAG)
18306  return NULL;
18307  soap->error = SOAP_OK;
18308  }
18309  if (!p)
18310  {
18311  p = (char**)soap_malloc(soap, sizeof(char*));
18312  if (!p)
18313  return NULL;
18314  }
18315  if (soap->null)
18316  {
18317  *p = NULL;
18318  }
18319  else if (soap->body)
18320  {
18321  *p = soap_string_in(soap, flag, minlen, maxlen, pattern);
18322  if (!*p || !(char*)soap_id_enter(soap, soap->id, *p, t, sizeof(char*), NULL, NULL, NULL, NULL))
18323  return NULL;
18324  if (!**p && tag && *tag == '-')
18325  {
18326  soap->error = SOAP_NO_TAG;
18327  return NULL;
18328  }
18329  }
18330  else if (tag && *tag == '-')
18331  {
18332  soap->error = SOAP_NO_TAG;
18333  return NULL;
18334  }
18335  else if (*soap->href != '#')
18336  {
18337  if (minlen > 0)
18338  {
18339  soap->error = SOAP_LENGTH;
18340  return NULL;
18341  }
18342  *p = soap_strdup(soap, SOAP_STR_EOS);
18343  if (!*p)
18344  return NULL;
18345  }
18346  if (*soap->href == '#')
18347  p = (char**)soap_id_lookup(soap, soap->href, (void**)p, t, sizeof(char**), 0, NULL);
18348  if (soap->body && soap_element_end_in(soap, tag))
18349  return NULL;
18350  return p;
18351 }
SOAP_FMAC1 void *SOAP_FMAC2 soap_id_lookup(struct soap *soap, const char *id, void **p, int t, size_t n, unsigned int k, int(*fbase)(int, int))
Definition: stdsoap2.cpp:10902

References soap::body, soap::error, soap::href, soap::id, soap::null, NULL, soap_element_begin_in(), soap_element_end_in(), soap_id_enter(), soap_id_lookup(), SOAP_LENGTH, soap_malloc(), SOAP_NO_TAG, SOAP_OK, SOAP_STR_EOS, soap_strdup(), and soap_string_in().

Referenced by soap_check_result(), soap_in__QName(), soap_in_string(), and soap_recv_fault().

◆ soap_int2s()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_int2s ( struct soap soap,
int  n 
)

Definition at line 16094 of file stdsoap2.cpp.

16095 {
16096  return soap_long2s(soap, (long)n);
16097 }

References soap_long2s().

Referenced by soap_bind(), and tcp_connect().

◆ soap_inULONG64()

SOAP_FMAC1 ULONG64* SOAP_FMAC2 soap_inULONG64 ( struct soap soap,
const char *  tag,
ULONG64 p,
const char *  type,
int  t 
)

Definition at line 17340 of file stdsoap2.cpp.

17341 {
17342  if (soap_element_begin_in(soap, tag, 0, NULL))
17343  return NULL;
17344 #ifndef WITH_LEAN
17345  if (*soap->type
17347  && soap_match_tag(soap, soap->type, ":positiveInteger")
17348  && soap_match_tag(soap, soap->type, ":nonNegativeInteger")
17349  && soap_match_tag(soap, soap->type, ":unsignedLong")
17350  && soap_match_tag(soap, soap->type, ":unsignedInt")
17351  && soap_match_tag(soap, soap->type, ":unsignedShort")
17352  && soap_match_tag(soap, soap->type, ":unsignedByte"))
17353  {
17354  soap->error = SOAP_TYPE;
17355  soap_revert(soap);
17356  return NULL;
17357  }
17358 #else
17359  (void)type;
17360 #endif
17361  p = (ULONG64*)soap_id_enter(soap, soap->id, p, t, sizeof(ULONG64), NULL, NULL, NULL, NULL);
17362  if (!p)
17363  return NULL;
17364  if (*soap->href != '#')
17365  {
17366  int err = soap_s2ULONG64(soap, soap_value(soap), p);
17367  if ((soap->body && soap_element_end_in(soap, tag)) || err)
17368  return NULL;
17369  }
17370  else
17371  {
17372  p = (ULONG64*)soap_id_forward(soap, soap->href, p, 0, t, t, sizeof(ULONG64), 0, NULL, NULL);
17373  if (soap->body && soap_element_end_in(soap, tag))
17374  return NULL;
17375  }
17376  return p;
17377 }
SOAP_FMAC1 int SOAP_FMAC2 soap_s2ULONG64(struct soap *soap, const char *s, ULONG64 *p)
Definition: stdsoap2.cpp:17308

References soap::body, soap::error, soap::href, soap::id, NULL, soap_element_begin_in(), soap_element_end_in(), soap_id_enter(), soap_id_forward(), soap_match_tag(), soap_revert(), soap_s2ULONG64(), SOAP_TYPE, soap_value(), soap::type, and ULONG64.

◆ soap_inunsignedByte()

SOAP_FMAC1 unsigned char* SOAP_FMAC2 soap_inunsignedByte ( struct soap soap,
const char *  tag,
unsigned char *  p,
const char *  type,
int  t 
)

Definition at line 16964 of file stdsoap2.cpp.

16965 {
16966  if (soap_element_begin_in(soap, tag, 0, NULL))
16967  return NULL;
16968 #ifndef WITH_LEAN
16969  if (*soap->type
16971  && soap_match_tag(soap, soap->type, ":unsignedByte"))
16972  {
16973  soap->error = SOAP_TYPE;
16974  soap_revert(soap);
16975  return NULL;
16976  }
16977 #else
16978  (void)type;
16979 #endif
16980  p = (unsigned char*)soap_id_enter(soap, soap->id, p, t, sizeof(unsigned char), NULL, NULL, NULL, NULL);
16981  if (!p)
16982  return NULL;
16983  if (*soap->href != '#')
16984  {
16985  int err = soap_s2unsignedByte(soap, soap_value(soap), p);
16986  if ((soap->body && soap_element_end_in(soap, tag)) || err)
16987  return NULL;
16988  }
16989  else
16990  {
16991  p = (unsigned char*)soap_id_forward(soap, soap->href, p, 0, t, t, sizeof(unsigned char), 0, NULL, NULL);
16992  if (soap->body && soap_element_end_in(soap, tag))
16993  return NULL;
16994  }
16995  return p;
16996 }
SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedByte(struct soap *soap, const char *s, unsigned char *p)
Definition: stdsoap2.cpp:16943

References soap::body, soap::error, soap::href, soap::id, NULL, soap_element_begin_in(), soap_element_end_in(), soap_id_enter(), soap_id_forward(), soap_match_tag(), soap_revert(), soap_s2unsignedByte(), SOAP_TYPE, soap_value(), and soap::type.

◆ soap_inunsignedInt()

SOAP_FMAC1 unsigned int* SOAP_FMAC2 soap_inunsignedInt ( struct soap soap,
const char *  tag,
unsigned int *  p,
const char *  type,
int  t 
)

Definition at line 17144 of file stdsoap2.cpp.

17145 {
17146  if (soap_element_begin_in(soap, tag, 0, NULL))
17147  return NULL;
17148 #ifndef WITH_LEAN
17149  if (*soap->type
17151  && soap_match_tag(soap, soap->type, ":unsignedInt")
17152  && soap_match_tag(soap, soap->type, ":unsignedShort")
17153  && soap_match_tag(soap, soap->type, ":unsignedByte"))
17154  {
17155  soap->error = SOAP_TYPE;
17156  soap_revert(soap);
17157  return NULL;
17158  }
17159 #else
17160  (void)type;
17161 #endif
17162  p = (unsigned int*)soap_id_enter(soap, soap->id, p, t, sizeof(unsigned int), NULL, NULL, NULL, NULL);
17163  if (!p)
17164  return NULL;
17165  if (*soap->href != '#')
17166  {
17167  int err = soap_s2unsignedInt(soap, soap_value(soap), p);
17168  if ((soap->body && soap_element_end_in(soap, tag)) || err)
17169  return NULL;
17170  }
17171  else
17172  {
17173  p = (unsigned int*)soap_id_forward(soap, soap->href, p, 0, t, t, sizeof(unsigned int), 0, NULL, NULL);
17174  if (soap->body && soap_element_end_in(soap, tag))
17175  return NULL;
17176  }
17177  return p;
17178 }
SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedInt(struct soap *soap, const char *s, unsigned int *p)
Definition: stdsoap2.cpp:17110

References soap::body, soap::error, soap::href, soap::id, NULL, soap_element_begin_in(), soap_element_end_in(), soap_id_enter(), soap_id_forward(), soap_match_tag(), soap_revert(), soap_s2unsignedInt(), SOAP_TYPE, soap_value(), and soap::type.

◆ soap_inunsignedLong()

SOAP_FMAC1 unsigned long* SOAP_FMAC2 soap_inunsignedLong ( struct soap soap,
const char *  tag,
unsigned long *  p,
const char *  type,
int  t 
)

Definition at line 17243 of file stdsoap2.cpp.

17244 {
17245  if (soap_element_begin_in(soap, tag, 0, NULL))
17246  return NULL;
17247 #ifndef WITH_LEAN
17248  if (*soap->type
17250  && soap_match_tag(soap, soap->type, ":unsignedInt")
17251  && soap_match_tag(soap, soap->type, ":unsignedShort")
17252  && soap_match_tag(soap, soap->type, ":unsignedByte"))
17253  {
17254  soap->error = SOAP_TYPE;
17255  soap_revert(soap);
17256  return NULL;
17257  }
17258 #else
17259  (void)type;
17260 #endif
17261  p = (unsigned long*)soap_id_enter(soap, soap->id, p, t, sizeof(unsigned long), NULL, NULL, NULL, NULL);
17262  if (!p)
17263  return NULL;
17264  if (*soap->href != '#')
17265  {
17266  int err = soap_s2unsignedLong(soap, soap_value(soap), p);
17267  if ((soap->body && soap_element_end_in(soap, tag)) || err)
17268  return NULL;
17269  }
17270  else
17271  {
17272  p = (unsigned long*)soap_id_forward(soap, soap->href, p, 0, t, t, sizeof(unsigned long), 0, NULL, NULL);
17273  if (soap->body && soap_element_end_in(soap, tag))
17274  return NULL;
17275  }
17276  return p;
17277 }
SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedLong(struct soap *soap, const char *s, unsigned long *p)
Definition: stdsoap2.cpp:17209

References soap::body, soap::error, soap::href, soap::id, NULL, soap_element_begin_in(), soap_element_end_in(), soap_id_enter(), soap_id_forward(), soap_match_tag(), soap_revert(), soap_s2unsignedLong(), SOAP_TYPE, soap_value(), and soap::type.

◆ soap_inunsignedShort()

SOAP_FMAC1 unsigned short* SOAP_FMAC2 soap_inunsignedShort ( struct soap soap,
const char *  tag,
unsigned short *  p,
const char *  type,
int  t 
)

Definition at line 17047 of file stdsoap2.cpp.

17048 {
17049  if (soap_element_begin_in(soap, tag, 0, NULL))
17050  return NULL;
17051 #ifndef WITH_LEAN
17052  if (*soap->type
17054  && soap_match_tag(soap, soap->type, ":unsignedShort")
17055  && soap_match_tag(soap, soap->type, ":unsignedByte"))
17056  {
17057  soap->error = SOAP_TYPE;
17058  soap_revert(soap);
17059  return NULL;
17060  }
17061 #else
17062  (void)type;
17063 #endif
17064  p = (unsigned short*)soap_id_enter(soap, soap->id, p, t, sizeof(unsigned short), NULL, NULL, NULL, NULL);
17065  if (!p)
17066  return NULL;
17067  if (*soap->href != '#')
17068  {
17069  int err = soap_s2unsignedShort(soap, soap_value(soap), p);
17070  if ((soap->body && soap_element_end_in(soap, tag)) || err)
17071  return NULL;
17072  }
17073  else
17074  {
17075  p = (unsigned short*)soap_id_forward(soap, soap->href, p, 0, t, t, sizeof(unsigned short), 0, NULL, NULL);
17076  if (soap->body && soap_element_end_in(soap, tag))
17077  return NULL;
17078  }
17079  return p;
17080 }
SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedShort(struct soap *soap, const char *s, unsigned short *p)
Definition: stdsoap2.cpp:17026

References soap::body, soap::error, soap::href, soap::id, NULL, soap_element_begin_in(), soap_element_end_in(), soap_id_enter(), soap_id_forward(), soap_match_tag(), soap_revert(), soap_s2unsignedShort(), SOAP_TYPE, soap_value(), and soap::type.

◆ soap_inwliteral()

SOAP_FMAC1 wchar_t** SOAP_FMAC2 soap_inwliteral ( struct soap soap,
const char *  tag,
wchar_t **  p 
)

Definition at line 18950 of file stdsoap2.cpp.

18951 {
18952  if (soap_element_begin_in(soap, tag, 1, NULL))
18953  {
18954  if (soap->error != SOAP_NO_TAG || soap_peek(soap) == SOAP_TT)
18955  return NULL;
18956  soap->error = SOAP_OK;
18957  }
18958  if (!p)
18959  {
18960  p = (wchar_t**)soap_malloc(soap, sizeof(wchar_t*));
18961  if (!p)
18962  return NULL;
18963  }
18964  if (soap->body)
18965  {
18966  if (tag && *tag != '-')
18967  *p = soap_wstring_in(soap, -1, -1, -1, NULL);
18968  else
18969  *p = soap_wstring_in(soap, 0, -1, -1, NULL);
18970  if (!*p)
18971  return NULL;
18972  if (!**p && tag && *tag == '-')
18973  {
18974  soap->error = SOAP_NO_TAG;
18975  return NULL;
18976  }
18977  }
18978  else if (tag && *tag == '-')
18979  {
18980  soap->error = SOAP_NO_TAG;
18981  return NULL;
18982  }
18983  else if (soap->null)
18984  {
18985  *p = NULL;
18986  }
18987  else
18988  {
18989  *p = soap_wstrdup(soap, L"");
18990  }
18991  if (soap->body && soap_element_end_in(soap, tag))
18992  return NULL;
18993  return p;
18994 }
SOAP_FMAC1 wchar_t *SOAP_FMAC2 soap_wstrdup(struct soap *soap, const wchar_t *s)
Definition: stdsoap2.cpp:2813
SOAP_FMAC1 wchar_t *SOAP_FMAC2 soap_wstring_in(struct soap *soap, int flag, long minlen, long maxlen, const char *pattern)
Definition: stdsoap2.cpp:15899

References soap::body, soap::error, soap::null, NULL, soap_element_begin_in(), soap_element_end_in(), soap_malloc(), SOAP_NO_TAG, SOAP_OK, soap_peek, SOAP_TT, soap_wstrdup(), and soap_wstring_in().

◆ soap_inwstring()

SOAP_FMAC1 wchar_t** SOAP_FMAC2 soap_inwstring ( struct soap soap,
const char *  tag,
wchar_t **  p,
const char *  type,
int  t,
int  flag,
long  minlen,
long  maxlen,
const char *  pattern 
)

Definition at line 18380 of file stdsoap2.cpp.

18381 {
18382  (void)type;
18383  if (soap_element_begin_in(soap, tag, 1, NULL))
18384  {
18385  if (!tag || *tag != '-' || soap->error != SOAP_NO_TAG)
18386  return NULL;
18387  soap->error = SOAP_OK;
18388  }
18389  if (!p)
18390  {
18391  p = (wchar_t**)soap_malloc(soap, sizeof(wchar_t*));
18392  if (!p)
18393  return NULL;
18394  }
18395  if (soap->null)
18396  {
18397  *p = NULL;
18398  }
18399  else if (soap->body)
18400  {
18401  *p = soap_wstring_in(soap, flag, minlen, maxlen, pattern);
18402  if (!*p || !(wchar_t*)soap_id_enter(soap, soap->id, *p, t, sizeof(wchar_t*), NULL, NULL, NULL, NULL))
18403  return NULL;
18404  if (!**p && tag && *tag == '-')
18405  {
18406  soap->error = SOAP_NO_TAG;
18407  return NULL;
18408  }
18409  }
18410  else if (tag && *tag == '-')
18411  {
18412  soap->error = SOAP_NO_TAG;
18413  return NULL;
18414  }
18415  else if (*soap->href != '#')
18416  {
18417  if (minlen > 0)
18418  {
18419  soap->error = SOAP_LENGTH;
18420  return NULL;
18421  }
18422  *p = soap_wstrdup(soap, L"");
18423  }
18424  if (*soap->href == '#')
18425  p = (wchar_t**)soap_id_lookup(soap, soap->href, (void**)p, t, sizeof(wchar_t**), 0, NULL);
18426  if (soap->body && soap_element_end_in(soap, tag))
18427  return NULL;
18428  return p;
18429 }

References soap::body, soap::error, soap::href, soap::id, soap::null, NULL, soap_element_begin_in(), soap_element_end_in(), soap_id_enter(), soap_id_lookup(), SOAP_LENGTH, soap_malloc(), SOAP_NO_TAG, SOAP_OK, soap_wstrdup(), and soap_wstring_in().

◆ soap_is_embedded()

SOAP_FMAC1 int SOAP_FMAC2 soap_is_embedded ( struct soap soap,
struct soap_plist pp 
)

Definition at line 10159 of file stdsoap2.cpp.

10160 {
10161  if (!pp)
10162  return 0;
10163  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Is embedded? %d %d\n", (int)pp->mark1, (int)pp->mark2));
10165  {
10166  if ((soap->mode & SOAP_IO_LENGTH))
10167  return pp->mark1 != 0;
10168  return pp->mark2 != 0;
10169  }
10170  if ((soap->mode & SOAP_IO_LENGTH))
10171  return pp->mark1 == 1;
10172  return pp->mark2 == 1;
10173 }

References DBGLOG, soap::encodingStyle, soap_plist::mark1, soap_plist::mark2, soap::mode, soap::omode, soap::part, SOAP_IN_HEADER, SOAP_IO_LENGTH, SOAP_XML_GRAPH, TEST(), and soap::version.

Referenced by soap_element_id(), and soap_embed().

◆ soap_is_single()

SOAP_FMAC1 int SOAP_FMAC2 soap_is_single ( struct soap soap,
struct soap_plist pp 
)

Definition at line 10182 of file stdsoap2.cpp.

10183 {
10184  if (soap->part == SOAP_IN_HEADER)
10185  return 1;
10186  if (!pp)
10187  return 0;
10188  if ((soap->mode & SOAP_IO_LENGTH))
10189  return pp->mark1 == 0;
10190  return pp->mark2 == 0;
10191 }

References soap_plist::mark1, soap_plist::mark2, soap::mode, soap::part, SOAP_IN_HEADER, and SOAP_IO_LENGTH.

Referenced by soap_element_id(), and soap_embed().

◆ soap_link()

SOAP_FMAC1 struct soap_clist* SOAP_FMAC2 soap_link ( struct soap soap,
int  t,
int  n,
int(*)(struct soap *, struct soap_clist *)  fdelete 
)

Definition at line 10768 of file stdsoap2.cpp.

10769 {
10770  struct soap_clist *cp = NULL;
10771  if (soap)
10772  {
10773  if (n != SOAP_NO_LINK_TO_DELETE)
10774  {
10775  cp = (struct soap_clist*)SOAP_MALLOC(soap, sizeof(struct soap_clist));
10776  if (!cp)
10777  {
10778  soap->error = SOAP_EOM;
10779  }
10780  else
10781  {
10782  cp->next = soap->clist;
10783  cp->type = t;
10784  cp->size = n;
10785  cp->ptr = NULL;
10786  cp->fdelete = fdelete;
10787  soap->clist = cp;
10788  }
10789  }
10790  soap->alloced = t;
10791  }
10792  return cp;
10793 }
#define SOAP_NO_LINK_TO_DELETE
Definition: stdsoap2.h:3073

References soap::alloced, soap::clist, soap::error, soap_clist::fdelete, soap_clist::next, NULL, soap_clist::ptr, soap_clist::size, SOAP_EOM, SOAP_MALLOC, SOAP_NO_LINK_TO_DELETE, and soap_clist::type.

◆ soap_long2s()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_long2s ( struct soap soap,
long  n 
)

Definition at line 16193 of file stdsoap2.cpp.

16194 {
16195  (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), 20), "%ld", n);
16196  return soap->tmpbuf;
16197 }

References SOAP_SNPRINTF, and soap::tmpbuf.

Referenced by soap_byte2s(), soap_int2s(), soap_outbyte(), soap_outint(), soap_outlong(), soap_outshort(), and soap_short2s().

◆ soap_LONG642s()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_LONG642s ( struct soap soap,
LONG64  n 
)

Definition at line 16288 of file stdsoap2.cpp.

16289 {
16290  (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), 20), SOAP_LONG_FORMAT, n);
16291  return soap->tmpbuf;
16292 }
#define SOAP_LONG_FORMAT
Definition: stdsoap2.h:1098

References SOAP_LONG_FORMAT, SOAP_SNPRINTF, and soap::tmpbuf.

Referenced by soap_outLONG64().

◆ soap_lookup()

SOAP_FMAC1 struct soap_ilist* SOAP_FMAC2 soap_lookup ( struct soap soap,
const char *  id 
)

Definition at line 10353 of file stdsoap2.cpp.

10354 {
10355  struct soap_ilist *ip = NULL;
10356  for (ip = soap->iht[soap_hash(id)]; ip; ip = ip->next)
10357  if (!strcmp(ip->id, id))
10358  return ip;
10359  return NULL;
10360 }

References soap_ilist::id, soap::iht, soap_ilist::next, NULL, and soap_hash().

Referenced by soap_id_enter(), soap_id_forward(), soap_id_lookup(), soap_id_smart(), and soap_lookup_type().

◆ soap_lookup_ns()

SOAP_FMAC1 struct soap_nlist* SOAP_FMAC2 soap_lookup_ns ( struct soap soap,
const char *  tag,
size_t  n 
)

Definition at line 12644 of file stdsoap2.cpp.

12645 {
12646  struct soap_nlist *np;
12647  for (np = soap->nlist; np; np = np->next)
12648  if (!strncmp(np->id, tag, n) && !np->id[n])
12649  return np;
12650  return NULL;
12651 }

References soap_nlist::id, soap_nlist::next, soap::nlist, and NULL.

Referenced by soap_set_attr(), and soap_utilize_ns().

◆ soap_lookup_plugin()

SOAP_FMAC1 void* SOAP_FMAC2 soap_lookup_plugin ( struct soap soap,
const char *  id 
)

Definition at line 22904 of file stdsoap2.cpp.

22905 {
22906  return soap->fplugin(soap, id);
22907 }

References soap::fplugin.

Referenced by soap_register_plugin_arg().

◆ soap_lookup_type()

SOAP_FMAC1 int SOAP_FMAC2 soap_lookup_type ( struct soap soap,
const char *  id 
)

Definition at line 10839 of file stdsoap2.cpp.

10840 {
10841  struct soap_ilist *ip;
10842  if (id && *id)
10843  {
10844  ip = soap_lookup(soap, id);
10845  if (ip)
10846  {
10847  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Lookup id='%s' type=%d\n", id, ip->type));
10848  return ip->type;
10849  }
10850  }
10851  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "lookup type id='%s' NOT FOUND! Need to get it from xsi:type\n", id));
10852  return 0;
10853 }

References DBGLOG, soap_lookup(), TEST(), and soap_ilist::type.

Referenced by soap_getelement().

◆ soap_malloc()

SOAP_FMAC1 void* SOAP_FMAC2 soap_malloc ( struct soap soap,
size_t  n 
)

Definition at line 10401 of file stdsoap2.cpp.

10402 {
10403  char *p;
10404  size_t k = n;
10405  if (SOAP_MAXALLOCSIZE > 0 && n > SOAP_MAXALLOCSIZE)
10406  {
10407  soap->error = SOAP_EOM;
10408  return NULL;
10409  }
10410  if (!soap)
10411  return SOAP_MALLOC(soap, n);
10412  n += sizeof(short);
10413  n += (~n+1) & (sizeof(void*)-1); /* align at 4-, 8- or 16-byte boundary by rounding up */
10414  if (n + sizeof(void*) + sizeof(size_t) < k)
10415  {
10416  soap->error = SOAP_EOM;
10417  return NULL;
10418  }
10419  p = (char*)SOAP_MALLOC(soap, n + sizeof(void*) + sizeof(size_t));
10420  if (!p)
10421  {
10422  soap->error = SOAP_EOM;
10423  return NULL;
10424  }
10425  /* set a canary word to detect memory overruns and data corruption */
10426  *(unsigned short*)(p + n - sizeof(unsigned short)) = (unsigned short)SOAP_CANARY;
10427  /* keep chain of alloced cells for destruction */
10428  *(void**)(p + n) = soap->alist;
10429  *(size_t*)(p + n + sizeof(void*)) = n;
10430  soap->alist = p + n;
10431  return p;
10432 }

References soap::alist, soap::error, NULL, SOAP_CANARY, SOAP_EOM, SOAP_MALLOC, and SOAP_MAXALLOCSIZE.

Referenced by soap_alloc_multipart(), soap_attachment(), soap_attribute(), soap_base642s(), soap_dime_option(), soap_element(), soap_element_start_end_out(), soap_encode_url_string(), soap_getbase64(), soap_getdimefield(), soap_gethex(), soap_hex2s(), soap_http_get_body_prefix(), soap_id_enter(), soap_id_lookup(), soap_in_PointerToSOAP_ENV__Code(), soap_in_PointerToSOAP_ENV__Detail(), soap_in_PointerToSOAP_ENV__Reason(), soap_in_PointerTostring(), soap_inliteral(), soap_instring(), soap_inwliteral(), soap_inwstring(), soap_memdup(), soap_new_byte(), soap_new_int(), soap_new_string(), soap_peek_element(), soap_resolve(), soap_s2base64(), soap_s2hex(), soap_save_block(), soap_select_mime_boundary(), soap_set_endpoint(), soap_strdup(), soap_wchar2s(), and soap_wstrdup().

◆ soap_mark_cycle()

SOAP_FMAC1 int SOAP_FMAC2 soap_mark_cycle ( struct soap soap,
struct soap_plist pp 
)

Definition at line 13760 of file stdsoap2.cpp.

13761 {
13762  (void)soap;
13763  return pp && pp->mark1 == 2 && (soap->mode & SOAP_XML_TREE);
13764 }

References soap_plist::mark1, soap::mode, and SOAP_XML_TREE.

◆ soap_mark_dup()

SOAP_FMAC1 void SOAP_FMAC2 soap_mark_dup ( struct soap soap,
void *  a,
struct soap_plist pp 
)

Definition at line 13771 of file stdsoap2.cpp.

13772 {
13773  (void)soap;
13774  if (pp)
13775  pp->dup = a;
13776 }
void * dup
Definition: stdsoap2.h:2039

References mpq::a, and soap_plist::dup.

◆ soap_mark_lookup()

SOAP_FMAC1 void* SOAP_FMAC2 soap_mark_lookup ( struct soap soap,
const void *  p,
int  t,
struct soap_plist **  pp,
char **  mark 
)

Definition at line 13725 of file stdsoap2.cpp.

13726 {
13727  if (!soap)
13728  return NULL;
13729  if (mark || !(soap->mode & SOAP_XML_TREE))
13730  {
13731  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Mark lookup %p type=%d\n", p, t));
13732  if (!soap_pointer_lookup(soap, p, t, ppp))
13733  {
13734  if (!soap_pointer_enter(soap, p, NULL, 0, t, ppp))
13735  return NULL;
13736  }
13737  else if (!(soap->mode & SOAP_XML_TREE))
13738  {
13739  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Mark found %p\n", (*ppp)->dup));
13740  return (*ppp)->dup;
13741  }
13742  if (mark)
13743  {
13744  if ((*ppp)->mark1 > 0)
13745  (*ppp)->mark1 = 2; /* cycle */
13746  else
13747  (*ppp)->mark1 = 1; /* cycle detection */
13748  *mark = &(*ppp)->mark1;
13749  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Mark cycle %d\n", (*ppp)->mark1));
13750  }
13751  }
13752  return NULL;
13753 }

References DBGLOG, soap::mode, NULL, soap_pointer_enter(), soap_pointer_lookup(), SOAP_XML_TREE, and TEST().

◆ soap_match_array()

SOAP_FMAC1 int SOAP_FMAC2 soap_match_array ( struct soap soap,
const char *  type 
)

Definition at line 3894 of file stdsoap2.cpp.

3895 {
3896  if (type && *soap->arrayType)
3897  {
3898  if (soap->version == 1 || !strchr(type, '['))
3899  {
3901  && soap_match_tag(soap, soap->arrayType, "xsd:anyType")
3902  && soap_match_tag(soap, soap->arrayType, "xsd:ur-type"))
3903  {
3904  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "SOAP array type mismatch: '%s' '%s'\n", soap->arrayType, type));
3905  return SOAP_TAG_MISMATCH;
3906  }
3907  }
3908  }
3909  return SOAP_OK;
3910 }

References soap::arrayType, DBGLOG, soap_match_tag(), SOAP_OK, SOAP_TAG_MISMATCH, TEST(), and soap::version.

◆ soap_match_att()

SOAP_FMAC1 int SOAP_FMAC2 soap_match_att ( struct soap soap,
const char *  tag1,
const char *  tag2 
)

Definition at line 3847 of file stdsoap2.cpp.

3848 {
3849  const char *s, *t;
3850  int err;
3851  if (!tag1 || !tag2 || !*tag2)
3852  return SOAP_OK;
3853  s = strchr(tag1, ':');
3854  t = strchr(tag2, ':');
3855  if (t)
3856  {
3857  if (s)
3858  {
3859  if (t[1] && SOAP_STRCMP(s + 1, t + 1))
3860  return SOAP_TAG_MISMATCH;
3861  if (t != tag2 && !(soap->mode & SOAP_XML_IGNORENS))
3862  {
3863  err = soap_match_namespace(soap, tag1, tag2, s - tag1, t - tag2);
3864  if (err)
3865  {
3866  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Atts '%s' and '%s' match but namespaces differ\n", tag1, tag2));
3867  if (err == SOAP_NAMESPACE)
3868  return SOAP_TAG_MISMATCH;
3869  return err;
3870  }
3871  }
3872  }
3873  else if (!t[1] || t != tag2 || SOAP_STRCMP(tag1, t + 1))
3874  return SOAP_TAG_MISMATCH;
3875  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Atts and (default) namespaces match: '%s' '%s'\n", tag1, tag2));
3876  return SOAP_OK;
3877  }
3878  if (s)
3879  {
3880  if (!(soap->mode & SOAP_XML_IGNORENS) || SOAP_STRCMP(s + 1, tag2)) /* always fails (except when ignoring ns) */
3881  return SOAP_TAG_MISMATCH;
3882  }
3883  else if (SOAP_STRCMP(tag1, tag2))
3884  return SOAP_TAG_MISMATCH;
3885  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Atts match: '%s' '%s'\n", tag1, tag2));
3886  return SOAP_OK;
3887 }
SOAP_FMAC1 int SOAP_FMAC2 soap_match_namespace(struct soap *soap, const char *id1, const char *id2, size_t n1, size_t n2)
Definition: stdsoap2.cpp:3621
#define SOAP_STRCMP
Definition: stdsoap2.h:944
#define SOAP_XML_IGNORENS
Definition: stdsoap2.h:1711

References DBGLOG, soap::mode, soap_match_namespace(), SOAP_NAMESPACE, SOAP_OK, SOAP_STRCMP, SOAP_TAG_MISMATCH, SOAP_XML_IGNORENS, and TEST().

Referenced by soap_attr_value().

◆ soap_match_cid()

SOAP_FMAC1 int SOAP_FMAC2 soap_match_cid ( struct soap soap,
const char *  s,
const char *  t 
)

Definition at line 19867 of file stdsoap2.cpp.

19868 {
19869  size_t n;
19870  if (!s)
19871  return 1;
19872  if (!strcmp(s, t))
19873  return 0;
19874  if (!strncmp(s, "cid:", 4))
19875  s += 4;
19876  n = strlen(t);
19877  if (*t == '<')
19878  {
19879  t++;
19880  n -= 2;
19881  }
19882  if (!strncmp(s, t, n) && !s[n])
19883  return 0;
19884  (void)soap_decode(soap->tmpbuf, sizeof(soap->tmpbuf), s, SOAP_STR_EOS);
19885  if (!strncmp(soap->tmpbuf, t, n) && !soap->tmpbuf[n])
19886  return 0;
19887  return 1;
19888 }

References soap_decode(), SOAP_STR_EOS, and soap::tmpbuf.

Referenced by soap_begin_recv(), and soap_resolve_attachment().

◆ soap_match_namespace()

SOAP_FMAC1 int SOAP_FMAC2 soap_match_namespace ( struct soap soap,
const char *  id1,
const char *  id2,
size_t  n1,
size_t  n2 
)

Definition at line 3621 of file stdsoap2.cpp.

3622 {
3623  struct soap_nlist *np = soap->nlist;
3624  const char *s;
3625  while (np && (strncmp(np->id, id1, n1) || np->id[n1]))
3626  np = np->next;
3627  if (np)
3628  {
3629  if (!(soap->mode & SOAP_XML_IGNORENS) && (n2 > 0 || !np->ns || *np->ns))
3630  {
3631  if (np->index < 0
3632  || ((s = soap->local_namespaces[np->index].id) && (strncmp(s, id2, n2) || (s[n2] && s[n2] != '_'))))
3633  return SOAP_NAMESPACE;
3634  }
3635  return SOAP_OK;
3636  }
3637  if (n1 == 0)
3638  return n2 == 0 || (soap->mode & SOAP_XML_IGNORENS) ? SOAP_OK : SOAP_NAMESPACE;
3639  if ((n1 == 3 && n1 == n2 && !strncmp(id1, "xml", 3) && !strncmp(id1, id2, 3))
3640  || (soap->mode & SOAP_XML_IGNORENS))
3641  return SOAP_OK;
3642  return soap->error = SOAP_SYNTAX_ERROR;
3643 }

References soap::error, Namespace::id, soap_nlist::id, soap_nlist::index, soap::local_namespaces, soap::mode, soap_nlist::next, soap::nlist, soap_nlist::ns, SOAP_NAMESPACE, SOAP_OK, SOAP_SYNTAX_ERROR, and SOAP_XML_IGNORENS.

Referenced by soap_match_att(), and soap_match_tag().

◆ soap_match_tag()

SOAP_FMAC1 int SOAP_FMAC2 soap_match_tag ( struct soap soap,
const char *  tag1,
const char *  tag2 
)

Definition at line 3776 of file stdsoap2.cpp.

3777 {
3778  const char *s, *t;
3779  int err;
3780  if (!tag1 || !tag2 || !*tag2)
3781  return SOAP_OK;
3782  s = strchr(tag1, ':');
3783  t = strchr(tag2, ':');
3784  if (t)
3785  {
3786  if (s)
3787  {
3788  if (t[1] && SOAP_STRCMP(s + 1, t + 1))
3789  return SOAP_TAG_MISMATCH;
3790  if (t != tag2 && !(soap->mode & SOAP_XML_IGNORENS))
3791  {
3792  err = soap_match_namespace(soap, tag1, tag2, s - tag1, t - tag2);
3793  if (err)
3794  {
3795  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Tags '%s' and '%s' match but namespaces differ\n", tag1, tag2));
3796  if (err == SOAP_NAMESPACE)
3797  return SOAP_TAG_MISMATCH;
3798  return err;
3799  }
3800  }
3801  }
3802  else if (!t[1])
3803  {
3804  if ((soap->mode & SOAP_XML_IGNORENS) || soap_match_namespace(soap, tag1, tag2, 0, t - tag2))
3805  return SOAP_TAG_MISMATCH;
3806  }
3807  else if (SOAP_STRCMP(tag1, t + 1))
3808  {
3809  return SOAP_TAG_MISMATCH;
3810  }
3811  else if (t != tag2)
3812  {
3813  err = soap_match_namespace(soap, tag1, tag2, 0, t - tag2);
3814  if (err)
3815  {
3816  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Tags '%s' and '%s' match but namespaces differ\n", tag1, tag2));
3817  if (err == SOAP_NAMESPACE)
3818  return SOAP_TAG_MISMATCH;
3819  return err;
3820  }
3821  }
3822  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Tags and (default) namespaces match: '%s' '%s'\n", tag1, tag2));
3823  return SOAP_OK;
3824  }
3825  if (s)
3826  {
3827  if (!(soap->mode & SOAP_XML_IGNORENS) || SOAP_STRCMP(s + 1, tag2)) /* always fails (except when ignoring ns) */
3828  return SOAP_TAG_MISMATCH;
3829  }
3830  else if (SOAP_STRCMP(tag1, tag2)
3831 #ifndef WITH_NOEMPTYNAMESPACES
3832  || ((soap->mode & SOAP_XML_STRICT) && !(soap->mode & SOAP_XML_IGNORENS) && soap_match_namespace(soap, tag1, tag2, 0, 0)) /* strict checking: default namespace must be null namespace */
3833 #endif
3834  )
3835  {
3836  return SOAP_TAG_MISMATCH;
3837  }
3838  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Tags match: '%s' '%s'\n", tag1, tag2));
3839  return SOAP_OK;
3840 }

References DBGLOG, endif(), soap::mode, soap_match_namespace(), SOAP_NAMESPACE, SOAP_OK, SOAP_STRCMP, SOAP_TAG_MISMATCH, SOAP_XML_IGNORENS, SOAP_XML_STRICT, and TEST().

Referenced by soap_element_begin_in(), soap_element_end_in(), soap_ignore_element(), soap_inbyte(), soap_indateTime(), soap_inint(), soap_inlong(), soap_inLONG64(), soap_inshort(), soap_instantiate_SOAP_ENV__Fault(), soap_inULONG64(), soap_inunsignedByte(), soap_inunsignedInt(), soap_inunsignedLong(), soap_inunsignedShort(), soap_isnumeric(), soap_match_array(), soap_peek_element(), soap_recv_fault(), and soap_serve_request().

◆ soap_memdup()

SOAP_FMAC1 void* SOAP_FMAC2 soap_memdup ( struct soap soap,
const void *  s,
size_t  n 
)

Definition at line 2772 of file stdsoap2.cpp.

2773 {
2774  void *t = NULL;
2775  if (s)
2776  {
2777  t = soap_malloc(soap, n);
2778  if (t)
2779  (void)soap_memcpy(t, n, s, n);
2780  }
2781  return t;
2782 }

References NULL, soap_malloc(), and soap_memcpy.

◆ soap_move()

SOAP_FMAC1 int SOAP_FMAC2 soap_move ( struct soap soap,
ULONG64  n 
)

Definition at line 2130 of file stdsoap2.cpp.

2131 {
2132  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Moving " SOAP_ULONG_FORMAT " bytes forward\n", n));
2133  for (; n; n--)
2134  if ((int)soap_getchar(soap) == EOF)
2135  return SOAP_EOF;
2136  return SOAP_OK;
2137 }

References DBGLOG, SOAP_EOF, soap_getchar(), SOAP_OK, SOAP_ULONG_FORMAT, and TEST().

Referenced by soap_getdime(), and soap_getdimefield().

◆ soap_new()

SOAP_FMAC1 struct soap* SOAP_FMAC2 soap_versioning() soap_new ( soap_mode  imode,
soap_mode  omode 
)

Definition at line 9564 of file stdsoap2.cpp.

9565 {
9566  struct soap *soap;
9567 #ifdef __cplusplus
9568  soap = SOAP_NEW_UNMANAGED(struct soap);
9569 #else
9570  soap = (struct soap*)SOAP_MALLOC_UNMANAGED(sizeof(struct soap));
9571 #endif
9572  if (soap)
9574  return soap;
9575 }
#define SOAP_NEW_UNMANAGED(soap)
Definition: stdsoap2.h:1889
#define SOAP_MALLOC_UNMANAGED(size)
Definition: stdsoap2.h:1828

References soap::imode, soap::omode, soap, soap_init(), SOAP_MALLOC_UNMANAGED, SOAP_NEW_UNMANAGED, and soap_versioning.

Referenced by soap_copy().

◆ soap_next_block()

SOAP_FMAC1 char* SOAP_FMAC2 soap_next_block ( struct soap soap,
struct soap_blist b 
)

Definition at line 3261 of file stdsoap2.cpp.

3262 {
3263  struct soap_bhead *p;
3264  if (!b)
3265  b = soap->blist;
3266  p = b->head;
3267  if (p)
3268  {
3269  b->head = p->next;
3270  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Next block %p, deleting current block\n", (void*)(b->head ? b->head + 1 : NULL)));
3271  SOAP_FREE(soap, p);
3272  if (b->head)
3273  return (char*)(b->head + 1);
3274  }
3275  return NULL;
3276 }

References b, soap::blist, DBGLOG, soap_bhead::next, NULL, SOAP_FREE, and TEST().

Referenced by soap_end_send_flush(), and soap_save_block().

◆ soap_next_multipart()

SOAP_FMAC1 struct soap_multipart* SOAP_FMAC2 soap_next_multipart ( struct soap_multipart content)

Definition at line 20284 of file stdsoap2.cpp.

20285 {
20286  if (content)
20287  return content->next;
20288  return NULL;
20289 }

References soap_multipart::next, and NULL.

◆ soap_nth()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_nth ( struct soap_dom_element elt,
size_t  n 
)

◆ soap_nth_elt()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_nth_elt ( struct soap_dom_element elt,
const char *  ns,
const char *  tag,
size_t  n 
)

◆ soap_nth_elt_w()

SOAP_FMAC1 struct soap_dom_element* SOAP_FMAC2 soap_nth_elt_w ( struct soap_dom_element elt,
const char *  ns,
const wchar_t *  tag,
size_t  n 
)

◆ soap_open_logfile()

SOAP_FMAC1 void SOAP_FMAC2 soap_open_logfile ( struct soap ,
int   
)

◆ soap_outbyte()

SOAP_FMAC1 int SOAP_FMAC2 soap_outbyte ( struct soap soap,
const char *  tag,
int  id,
const char *  p,
const char *  type,
int  n 
)

Definition at line 16399 of file stdsoap2.cpp.

16400 {
16401  if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
16402  || soap_string_out(soap, soap_long2s(soap, (long)*p), 0))
16403  return soap->error;
16404  return soap_element_end_out(soap, tag);
16405 }
SOAP_FMAC1 int SOAP_FMAC2 soap_embedded_id(struct soap *soap, int id, const void *p, int t)
Definition: stdsoap2.cpp:10117

References soap::error, soap_element_begin_out(), soap_element_end_out(), soap_embedded_id(), soap_long2s(), and soap_string_out().

Referenced by soap_out_byte().

◆ soap_outdateTime()

SOAP_FMAC1 int SOAP_FMAC2 soap_outdateTime ( struct soap soap,
const char *  tag,
int  id,
const time_t *  p,
const char *  type,
int  n 
)

Definition at line 18671 of file stdsoap2.cpp.

18672 {
18673  if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
18675  return soap->error;
18676  return soap_element_end_out(soap, tag);
18677 }
SOAP_FMAC1 const char *SOAP_FMAC2 soap_dateTime2s(struct soap *soap, time_t n)
Definition: stdsoap2.cpp:18561

References soap::error, soap_dateTime2s(), soap_element_begin_out(), soap_element_end_out(), soap_embedded_id(), and soap_string_out().

◆ soap_outdouble()

SOAP_FMAC1 int SOAP_FMAC2 soap_outdouble ( struct soap soap,
const char *  tag,
int  id,
const double *  p,
const char *  type,
int  n 
)

Definition at line 16804 of file stdsoap2.cpp.

16805 {
16806  if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
16807  || soap_string_out(soap, soap_double2s(soap, *p), 0))
16808  return soap->error;
16809  return soap_element_end_out(soap, tag);
16810 }
SOAP_FMAC1 const char *SOAP_FMAC2 soap_double2s(struct soap *soap, double n)
Definition: stdsoap2.cpp:16767

References soap::error, soap_double2s(), soap_element_begin_out(), soap_element_end_out(), soap_embedded_id(), and soap_string_out().

◆ soap_outfloat()

SOAP_FMAC1 int SOAP_FMAC2 soap_outfloat ( struct soap soap,
const char *  tag,
int  id,
const float *  p,
const char *  type,
int  n 
)

Definition at line 16593 of file stdsoap2.cpp.

16594 {
16595  if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
16596  || soap_string_out(soap, soap_float2s(soap, *p), 0))
16597  return soap->error;
16598  return soap_element_end_out(soap, tag);
16599 }
SOAP_FMAC1 const char *SOAP_FMAC2 soap_float2s(struct soap *soap, float n)
Definition: stdsoap2.cpp:16556

References soap::error, soap_element_begin_out(), soap_element_end_out(), soap_embedded_id(), soap_float2s(), and soap_string_out().

◆ soap_outint()

SOAP_FMAC1 int SOAP_FMAC2 soap_outint ( struct soap soap,
const char *  tag,
int  id,
const int *  p,
const char *  type,
int  n 
)

Definition at line 16104 of file stdsoap2.cpp.

16105 {
16106  if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
16107  || soap_string_out(soap, soap_long2s(soap, (long)*p), 0))
16108  return soap->error;
16109  return soap_element_end_out(soap, tag);
16110 }

References soap::error, soap_element_begin_out(), soap_element_end_out(), soap_embedded_id(), soap_long2s(), and soap_string_out().

Referenced by soap_out_int().

◆ soap_outliteral()

SOAP_FMAC1 int SOAP_FMAC2 soap_outliteral ( struct soap soap,
const char *  tag,
char *const p,
const char *  type 
)

Definition at line 18858 of file stdsoap2.cpp.

18859 {
18860  if (tag && *tag != '-')
18861  if (soap_element_begin_out(soap, tag, 0, type))
18862  return soap->error;
18863  if (p && *p)
18864  if (soap_send(soap, *p)) /* send as-is */
18865  return soap->error;
18866  if (tag && *tag != '-')
18867  return soap_element_end_out(soap, tag);
18868  return SOAP_OK;
18869 }

References soap::error, soap_element_begin_out(), soap_element_end_out(), SOAP_OK, and soap_send().

Referenced by soap_out_SOAP_ENV__Detail(), and soap_send_fault().

◆ soap_outlong()

SOAP_FMAC1 int SOAP_FMAC2 soap_outlong ( struct soap soap,
const char *  tag,
int  id,
const long *  p,
const char *  type,
int  n 
)

Definition at line 16204 of file stdsoap2.cpp.

16205 {
16206  if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
16207  || soap_string_out(soap, soap_long2s(soap, *p), 0))
16208  return soap->error;
16209  return soap_element_end_out(soap, tag);
16210 }

References soap::error, soap_element_begin_out(), soap_element_end_out(), soap_embedded_id(), soap_long2s(), and soap_string_out().

◆ soap_outLONG64()

SOAP_FMAC1 int SOAP_FMAC2 soap_outLONG64 ( struct soap soap,
const char *  tag,
int  id,
const LONG64 p,
const char *  type,
int  n 
)

Definition at line 16299 of file stdsoap2.cpp.

16300 {
16301  if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
16302  || soap_string_out(soap, soap_LONG642s(soap, *p), 0))
16303  return soap->error;
16304  return soap_element_end_out(soap, tag);
16305 }
SOAP_FMAC1 const char *SOAP_FMAC2 soap_LONG642s(struct soap *soap, LONG64 n)
Definition: stdsoap2.cpp:16288

References soap::error, soap_element_begin_out(), soap_element_end_out(), soap_embedded_id(), soap_LONG642s(), and soap_string_out().

◆ soap_outshort()

SOAP_FMAC1 int SOAP_FMAC2 soap_outshort ( struct soap soap,
const char *  tag,
int  id,
const short *  p,
const char *  type,
int  n 
)

Definition at line 16482 of file stdsoap2.cpp.

16483 {
16484  if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
16485  || soap_string_out(soap, soap_long2s(soap, (long)*p), 0))
16486  return soap->error;
16487  return soap_element_end_out(soap, tag);
16488 }

References soap::error, soap_element_begin_out(), soap_element_end_out(), soap_embedded_id(), soap_long2s(), and soap_string_out().

◆ soap_outstring()

SOAP_FMAC1 int SOAP_FMAC2 soap_outstring ( struct soap soap,
const char *  tag,
int  id,
char *const p,
const char *  type,
int  n 
)

Definition at line 18281 of file stdsoap2.cpp.

18282 {
18283  id = soap_element_id(soap, tag, id, *p, NULL, 0, type, n, NULL);
18284  if (id < 0)
18285  return soap->error;
18286  if (!**p && (soap->mode & SOAP_C_NILSTRING))
18287  return soap_element_null(soap, tag, id, type);
18288  if (soap_element_begin_out(soap, tag, id, type)
18289  || soap_string_out(soap, *p, 0)
18290  || soap_element_end_out(soap, tag))
18291  return soap->error;
18292  return SOAP_OK;
18293 }
#define SOAP_C_NILSTRING
Definition: stdsoap2.h:1727

References soap::error, soap::mode, NULL, SOAP_C_NILSTRING, soap_element_begin_out(), soap_element_end_out(), soap_element_id(), soap_element_null(), SOAP_OK, and soap_string_out().

Referenced by soap_out__QName(), soap_out_string(), and soap_send_fault().

◆ soap_outULONG64()

SOAP_FMAC1 int SOAP_FMAC2 soap_outULONG64 ( struct soap soap,
const char *  tag,
int  id,
const ULONG64 p,
const char *  type,
int  n 
)

Definition at line 17295 of file stdsoap2.cpp.

17296 {
17297  if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
17298  || soap_string_out(soap, soap_ULONG642s(soap, *p), 0))
17299  return soap->error;
17300  return soap_element_end_out(soap, tag);
17301 }
SOAP_FMAC1 const char *SOAP_FMAC2 soap_ULONG642s(struct soap *soap, ULONG64 n)
Definition: stdsoap2.cpp:17284

References soap::error, soap_element_begin_out(), soap_element_end_out(), soap_embedded_id(), soap_string_out(), and soap_ULONG642s().

◆ soap_outunsignedByte()

SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedByte ( struct soap soap,
const char *  tag,
int  id,
const unsigned char *  p,
const char *  type,
int  n 
)

Definition at line 16930 of file stdsoap2.cpp.

16931 {
16932  if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
16933  || soap_string_out(soap, soap_unsignedLong2s(soap, (unsigned long)*p), 0))
16934  return soap->error;
16935  return soap_element_end_out(soap, tag);
16936 }
SOAP_FMAC1 const char *SOAP_FMAC2 soap_unsignedLong2s(struct soap *soap, unsigned long n)
Definition: stdsoap2.cpp:17185

References soap::error, soap_element_begin_out(), soap_element_end_out(), soap_embedded_id(), soap_string_out(), and soap_unsignedLong2s().

◆ soap_outunsignedInt()

SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedInt ( struct soap soap,
const char *  tag,
int  id,
const unsigned int *  p,
const char *  type,
int  n 
)

Definition at line 17097 of file stdsoap2.cpp.

17098 {
17099  if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
17100  || soap_string_out(soap, soap_unsignedLong2s(soap, (unsigned long)*p), 0))
17101  return soap->error;
17102  return soap_element_end_out(soap, tag);
17103 }

References soap::error, soap_element_begin_out(), soap_element_end_out(), soap_embedded_id(), soap_string_out(), and soap_unsignedLong2s().

◆ soap_outunsignedLong()

SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedLong ( struct soap soap,
const char *  tag,
int  id,
const unsigned long *  p,
const char *  type,
int  n 
)

Definition at line 17196 of file stdsoap2.cpp.

17197 {
17198  if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
17200  return soap->error;
17201  return soap_element_end_out(soap, tag);
17202 }

References soap::error, soap_element_begin_out(), soap_element_end_out(), soap_embedded_id(), soap_string_out(), and soap_unsignedLong2s().

◆ soap_outunsignedShort()

SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedShort ( struct soap soap,
const char *  tag,
int  id,
const unsigned short *  p,
const char *  type,
int  n 
)

Definition at line 17013 of file stdsoap2.cpp.

17014 {
17015  if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
17016  || soap_string_out(soap, soap_unsignedLong2s(soap, (unsigned long)*p), 0))
17017  return soap->error;
17018  return soap_element_end_out(soap, tag);
17019 }

References soap::error, soap_element_begin_out(), soap_element_end_out(), soap_embedded_id(), soap_string_out(), and soap_unsignedLong2s().

◆ soap_outwliteral()

SOAP_FMAC1 int SOAP_FMAC2 soap_outwliteral ( struct soap soap,
const char *  tag,
wchar_t *const p,
const char *  type 
)

Definition at line 18923 of file stdsoap2.cpp.

18924 {
18925  if (tag && *tag != '-')
18926  if (soap_element_begin_out(soap, tag, 0, type))
18927  return soap->error;
18928  if (p)
18929  {
18930  wchar_t c;
18931  const wchar_t *s = *p;
18932  while ((c = *s++))
18933  {
18934  if (soap_pututf8(soap, (unsigned long)c)) /* send as-is in UTF8 */
18935  return soap->error;
18936  }
18937  }
18938  if (tag && *tag != '-')
18939  return soap_element_end_out(soap, tag);
18940  return SOAP_OK;
18941 }
SOAP_FMAC1 int SOAP_FMAC2 soap_pututf8(struct soap *soap, unsigned long c)
Definition: stdsoap2.cpp:2157

References mpq::c, soap::error, soap_element_begin_out(), soap_element_end_out(), SOAP_OK, and soap_pututf8().

◆ soap_outwstring()

SOAP_FMAC1 int SOAP_FMAC2 soap_outwstring ( struct soap soap,
const char *  tag,
int  id,
wchar_t *const p,
const char *  type,
int  n 
)

Definition at line 18359 of file stdsoap2.cpp.

18360 {
18361  id = soap_element_id(soap, tag, id, *p, NULL, 0, type, n, NULL);
18362  if (id < 0)
18363  return soap->error;
18364  if (!**p && (soap->mode & SOAP_C_NILSTRING))
18365  return soap_element_null(soap, tag, id, type);
18366  if (soap_element_begin_out(soap, tag, id, type)
18367  || soap_wstring_out(soap, *p, 0)
18368  || soap_element_end_out(soap, tag))
18369  return soap->error;
18370  return SOAP_OK;
18371 }
SOAP_FMAC1 int SOAP_FMAC2 soap_wstring_out(struct soap *soap, const wchar_t *s, int flag)
Definition: stdsoap2.cpp:15810

References soap::error, soap::mode, NULL, SOAP_C_NILSTRING, soap_element_begin_out(), soap_element_end_out(), soap_element_id(), soap_element_null(), SOAP_OK, and soap_wstring_out().

◆ soap_PATCH()

SOAP_FMAC1 int SOAP_FMAC2 soap_PATCH ( struct soap soap,
const char *  endpoint,
const char *  action,
const char *  type 
)

◆ soap_peek_element()

SOAP_FMAC1 int SOAP_FMAC2 soap_peek_element ( struct soap soap)

Definition at line 14442 of file stdsoap2.cpp.

14443 {
14444 #ifdef WITH_DOM
14445  struct soap_dom_attribute **att = NULL;
14446  char *lead = NULL;
14447 #endif
14448  struct soap_attribute *tp, *tq = NULL;
14449  const char *t;
14450  char *s;
14451  soap_wchar c;
14452  int i;
14453  if (soap->peeked)
14454  {
14455  if (!*soap->tag)
14456  return soap->error = SOAP_NO_TAG;
14457  return SOAP_OK;
14458  }
14459  soap->peeked = 1;
14460  soap->id[0] = '\0';
14461  soap->href[0] = '\0';
14462  soap->type[0] = '\0';
14463  soap->arrayType[0] = '\0';
14464  soap->arraySize[0] = '\0';
14465  soap->arrayOffset[0] = '\0';
14466  soap->other = 0;
14467  soap->root = -1;
14468  soap->position = 0;
14469  soap->null = 0;
14470  soap->mustUnderstand = 0;
14471  /* UTF-8 BOM? */
14472  c = soap_getchar(soap);
14473  if (c == 0xEF && soap_get0(soap) == 0xBB)
14474  {
14475  soap_get1(soap);
14476  c = soap_get1(soap);
14477  if (c == 0xBF)
14478  soap->mode &= ~SOAP_ENC_LATIN;
14479  else
14480  soap_unget(soap, (0x0F << 12) | (0xBB << 6) | (c & 0x3F)); /* UTF-8 */
14481  }
14482  else if ((c == 0xFE && soap_get0(soap) == 0xFF) /* UTF-16 BE */
14483  || (c == 0xFF && soap_get0(soap) == 0xFE)) /* UTF-16 LE */
14484  {
14485  return soap->error = SOAP_UTF_ERROR;
14486  }
14487  else
14488  {
14489  soap_unget(soap, c);
14490  }
14491  c = soap_get(soap);
14492 #ifdef WITH_DOM
14493  /* whitespace leading up to the start tag is significant for DOM as-is (but comments and PIs are removed from this lead) */
14494  if (soap_coblank(c))
14495  {
14496  soap->labidx = 0;
14497  do
14498  {
14499  if (soap_append_lab(soap, NULL, 0))
14500  return soap->error;
14501  s = soap->labbuf + soap->labidx;
14502  i = soap->lablen - soap->labidx;
14503  soap->labidx = soap->lablen;
14504  while (soap_coblank(c) && i-- > 0)
14505  {
14506  *s++ = c;
14507  c = soap_get(soap);
14508  }
14509  } while (soap_coblank(c) || i == 0);
14510  *s = '\0';
14511  lead = soap->labbuf;
14512  }
14513 #else
14514  /* skip space */
14515  while (soap_coblank(c))
14516  c = soap_get(soap);
14517 #endif
14518  if (c != SOAP_LT)
14519  {
14520  *soap->tag = '\0';
14521  if ((int)c == EOF)
14522  return soap->error = SOAP_CHK_EOF;
14523  soap_unget(soap, c);
14524 #ifdef WITH_DOM
14525  /* whitespace leading up to the end tag is significant for DOM as-is */
14526  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
14527  {
14528  if (lead && *lead)
14529  soap->dom->tail = soap_strdup(soap, lead);
14530  else
14531  soap->dom->tail = SOAP_STR_EOS; /* body with closing tag instead of <tag/> */
14532  }
14533 #endif
14534  return soap->error = SOAP_NO_TAG;
14535  }
14536  do
14537  {
14538  c = soap_get1(soap);
14539  } while (soap_coblank(c));
14540  s = soap->tag;
14541  i = sizeof(soap->tag);
14542  while (c != '>' && c != '/' && c > 32 && (int)c != EOF)
14543  {
14544  if (i > 1)
14545  {
14546  *s++ = (char)c;
14547  i--;
14548  }
14549  c = soap_get1(soap);
14550  }
14551  *s = '\0';
14552  while (soap_coblank(c))
14553  c = soap_get1(soap);
14554 #ifdef WITH_DOM
14555  if ((soap->mode & SOAP_XML_DOM))
14556  {
14557  struct soap_dom_element *elt;
14558  elt = (struct soap_dom_element*)soap_malloc(soap, sizeof(struct soap_dom_element));
14559  if (!elt)
14560  return soap->error;
14561  elt->next = NULL;
14562  elt->prnt = soap->dom;
14563  elt->elts = NULL;
14564  elt->atts = NULL;
14565  elt->nstr = NULL;
14566  elt->name = soap_strdup(soap, soap->tag);
14567  elt->text = NULL;
14568  elt->code = NULL;
14569  elt->tail = NULL;
14570  elt->node = NULL;
14571  elt->type = 0;
14572  if (lead && *lead)
14573  elt->lead = soap_strdup(soap, lead);
14574  else
14575  elt->lead = NULL;
14576  elt->soap = soap;
14577  if (soap->dom)
14578  {
14579  struct soap_dom_element *p = soap->dom->elts;
14580  if (p)
14581  {
14582  while (p->next)
14583  p = p->next;
14584  p->next = elt;
14585  }
14586  else
14587  {
14588  soap->dom->elts = elt;
14589  }
14590  }
14591  soap->dom = elt;
14592  att = &elt->atts;
14593  if (!elt->name)
14594  return soap->error = SOAP_EOM;
14595  }
14596 #endif
14598  for (tp = soap->attributes; tp; tp = tp->next)
14599  tp->visible = 0;
14600  while ((int)c != EOF && c != '>' && c != '/')
14601  {
14602  s = soap->tmpbuf;
14603  i = sizeof(soap->tmpbuf);
14604  while (c != '=' && c != '>' && c != '/' && c > 32 && (int)c != EOF)
14605  {
14606  if (i > 1)
14607  {
14608  *s++ = (char)c;
14609  i--;
14610  }
14611  c = soap_get1(soap);
14612  }
14613  *s = '\0';
14614  if (i == sizeof(soap->tmpbuf))
14615  return soap->error = SOAP_SYNTAX_ERROR;
14616 #ifdef WITH_DOM
14617  /* add attribute name to dom */
14618  if (att)
14619  {
14620  *att = (struct soap_dom_attribute*)soap_malloc(soap, sizeof(struct soap_dom_attribute));
14621  if (!*att)
14622  return soap->error;
14623  (*att)->next = NULL;
14624  (*att)->nstr = NULL;
14625  (*att)->name = soap_strdup(soap, soap->tmpbuf);
14626  (*att)->text = NULL;
14627  (*att)->soap = soap;
14628  if (!(*att)->name)
14629  return soap->error = SOAP_EOM;
14630  }
14631 #endif
14632  if (!strncmp(soap->tmpbuf, "xmlns", 5))
14633  {
14634  if (soap->tmpbuf[5] == ':')
14635  t = soap->tmpbuf + 6;
14636  else if (soap->tmpbuf[5])
14637  t = NULL;
14638  else
14639  t = SOAP_STR_EOS;
14640  }
14641  else
14642  {
14643  t = NULL;
14644  }
14645  tq = NULL;
14646  for (tp = soap->attributes; tp; tq = tp, tp = tp->next)
14647  {
14648  if (!SOAP_STRCMP(tp->name, soap->tmpbuf))
14649  break;
14650  }
14651  if (!tp)
14652  {
14653  size_t l = strlen(soap->tmpbuf);
14654  tp = (struct soap_attribute*)SOAP_MALLOC(soap, sizeof(struct soap_attribute) + l);
14655  if (!tp)
14656  return soap->error = SOAP_EOM;
14657  (void)soap_memcpy((char*)tp->name, l + 1, soap->tmpbuf, l + 1);
14658  tp->value = NULL;
14659  tp->size = 0;
14660  tp->ns = NULL;
14661  tp->visible = 0;
14662  /* append attribute to the end of the list */
14663  if (tq)
14664  {
14665  tq->next = tp;
14666  tp->next = NULL;
14667  }
14668  else
14669  {
14670  tp->next = soap->attributes;
14671  soap->attributes = tp;
14672  }
14673  }
14674  while (soap_coblank(c))
14675  c = soap_get1(soap);
14676  if (c == '=')
14677  {
14678  size_t k;
14679  do
14680  {
14681  c = soap_getutf8(soap);
14682  } while (soap_coblank(c));
14683  if (c != SOAP_QT && c != SOAP_AP)
14684  {
14685  soap_unget(soap, c);
14686  c = ' '; /* blank delimiter */
14687  }
14688  k = tp->size;
14689  if (soap_getattrval(soap, tp->value, &k, c))
14690  {
14691 #ifdef WITH_FAST
14692  if (soap->error != SOAP_EOM)
14693  return soap->error;
14694  soap->error = SOAP_OK;
14695  if (soap_store_lab(soap, tp->value, k))
14696  return soap->error;
14697  if (tp->value)
14698  SOAP_FREE(soap, tp->value);
14699  tp->value = NULL;
14700  for (;;)
14701  {
14702  k = soap->lablen - soap->labidx;
14703  if (soap_getattrval(soap, soap->labbuf + soap->labidx, &k, c))
14704  {
14705  if (soap->error != SOAP_EOM)
14706  return soap->error;
14707  soap->error = SOAP_OK;
14708  soap->labidx = soap->lablen;
14709  if (soap_append_lab(soap, NULL, 0))
14710  return soap->error;
14711  }
14712  else
14713  {
14714  break;
14715  }
14716  }
14717  if (soap->labidx)
14718  {
14719  tp->size = soap->lablen;
14720  }
14721  else
14722  {
14723  tp->size = strlen(soap->labbuf) + 1;
14724  if (tp->size < SOAP_LABLEN)
14725  tp->size = SOAP_LABLEN;
14726  }
14727  tp->value = (char*)SOAP_MALLOC(soap, tp->size);
14728  if (!tp->value)
14729  return soap->error = SOAP_EOM;
14730  soap_strcpy(tp->value, tp->size, soap->labbuf);
14731 #else
14732  tp->size = k;
14733  if (soap->error != SOAP_EOM)
14734  return soap->error;
14735  soap->error = SOAP_OK;
14736  if (soap_alloc_block(soap) == NULL)
14737  return soap->error;
14738  for (;;)
14739  {
14740  s = (char*)soap_push_block(soap, NULL, SOAP_BLKLEN);
14741  if (!s)
14742  return soap->error;
14743  k = SOAP_BLKLEN;
14744  if (soap_getattrval(soap, s, &k, c))
14745  {
14746  if (soap->error != SOAP_EOM)
14747  return soap->error;
14748  soap->error = SOAP_OK;
14749  soap_size_block(soap, NULL, k);
14750  }
14751  else
14752  {
14753  break;
14754  }
14755  }
14756  k = tp->size + soap->blist->size;
14757  if (SOAP_MAXALLOCSIZE > 0 && k > SOAP_MAXALLOCSIZE)
14758  return soap->error = SOAP_EOM;
14759  s = (char*)SOAP_MALLOC(soap, k);
14760  if (!s)
14761  return soap->error = SOAP_EOM;
14762  if (tp->value)
14763  {
14764  (void)soap_memcpy((void*)s, k, (const void*)tp->value, tp->size);
14765  SOAP_FREE(soap, tp->value);
14766  }
14767  soap_save_block(soap, NULL, s + tp->size, 0);
14768  tp->value = s;
14769  tp->size = k;
14770 #endif
14771  }
14772  if (tp->visible)
14773  {
14774  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Duplicate attribute in %s\n", soap->tag));
14775  return soap->error = SOAP_SYNTAX_ERROR; /* redefined (duplicate) attribute */
14776  }
14777  tp->visible = 2; /* seen this attribute w/ value */
14778  do
14779  {
14780  c = soap_get1(soap);
14781  } while (soap_coblank(c));
14782 #ifdef WITH_DOM
14783  if (att && tp->value)
14784  {
14785  (*att)->text = soap_strdup(soap, tp->value);
14786  if (!(*att)->text)
14787  return soap->error = SOAP_EOM;
14788  }
14789 #endif
14790  }
14791  else
14792  {
14793  tp->visible = 1; /* seen this attribute w/o value */
14794  }
14795 #ifdef WITH_DOM
14796  if (att)
14797  att = &(*att)->next;
14798 #endif
14799  if (t && tp->value)
14800  {
14801  if (soap_push_namespace(soap, t, tp->value) == NULL)
14802  return soap->error;
14803  }
14804  }
14805 #ifdef WITH_DOM
14806  if (att)
14807  {
14809  for (att = &soap->dom->atts; *att; att = &(*att)->next)
14810  (*att)->nstr = soap_current_namespace_att(soap, (*att)->name);
14811  }
14812 #endif
14813  if ((int)c == EOF)
14814  return soap->error = SOAP_CHK_EOF;
14815  soap->body = (c != '/');
14816  if (!soap->body)
14817  {
14818  do
14819  {
14820  c = soap_get1(soap);
14821  } while (soap_coblank(c));
14822  }
14823 #ifdef WITH_DOM
14824  if ((soap->mode & SOAP_XML_DOM))
14825  {
14826  if (!soap->body && soap->dom->prnt)
14827  soap->dom = soap->dom->prnt;
14828  }
14829 #endif
14830  for (tp = soap->attributes; tp; tp = tp->next)
14831  {
14832  if (tp->visible && tp->value)
14833  {
14834 #ifndef WITH_NOIDREF
14835  if (!strcmp(tp->name, "id"))
14836  {
14837  if ((soap->version > 0 && !(soap->imode & SOAP_XML_TREE))
14838  || (soap->mode & SOAP_XML_GRAPH))
14839  {
14840  *soap->id = '#';
14841  soap_strcpy(soap->id + 1, sizeof(soap->id) - 1, tp->value);
14842  }
14843  }
14844  else if (!strcmp(tp->name, "href"))
14845  {
14846  if ((soap->version == 1 && !(soap->imode & SOAP_XML_TREE))
14847  || (soap->mode & SOAP_XML_GRAPH)
14848  || ((soap->mode & (SOAP_ENC_MTOM | SOAP_ENC_DIME)) && *tp->value != '#'))
14849  soap_strcpy(soap->href, sizeof(soap->href), tp->value);
14850  }
14851  else if (!strcmp(tp->name, "ref"))
14852  {
14853  if ((soap->version == 2 && !(soap->imode & SOAP_XML_TREE))
14854  || (soap->mode & SOAP_XML_GRAPH))
14855  {
14856  *soap->href = '#';
14857  soap_strcpy(soap->href + (*tp->value != '#'), sizeof(soap->href) - 1, tp->value);
14858  }
14859  }
14860 #else
14861  if (!strcmp(tp->name, "href"))
14862  {
14863  if ((soap->mode & (SOAP_ENC_MTOM | SOAP_ENC_DIME)) && *tp->value != '#')
14864  soap_strcpy(soap->href, sizeof(soap->href), tp->value);
14865  }
14866 #endif
14867  else if (!soap_match_tag(soap, tp->name, "xsi:type"))
14868  {
14869  soap_strcpy(soap->type, sizeof(soap->type), tp->value);
14870  }
14871  else if ((!soap_match_tag(soap, tp->name, "xsi:null")
14872  || !soap_match_tag(soap, tp->name, "xsi:nil"))
14873  && (!strcmp(tp->value, "1")
14874  || !strcmp(tp->value, "true")))
14875  {
14876  soap->null = 1;
14877  }
14878  else if (!soap_match_tag(soap, tp->name, "SOAP-ENV:encodingStyle"))
14879  {
14880  if (!soap->encodingStyle)
14882  soap_version(soap);
14883  }
14884  else if (soap->version == 1)
14885  {
14886  if (!soap_match_tag(soap, tp->name, "SOAP-ENC:arrayType"))
14887  {
14888  s = soap_strrchr(tp->value, '[');
14889  if (s && (size_t)(s - tp->value) < sizeof(soap->arrayType))
14890  {
14891  (void)soap_strncpy(soap->arrayType, sizeof(soap->arrayType), tp->value, s - tp->value);
14892  soap_strcpy(soap->arraySize, sizeof(soap->arraySize), s);
14893  }
14894  else
14895  soap_strcpy(soap->arrayType, sizeof(soap->arrayType), tp->value);
14896  }
14897  else if (!soap_match_tag(soap, tp->name, "SOAP-ENC:offset"))
14898  {
14899  soap_strcpy(soap->arrayOffset, sizeof(soap->arrayOffset), tp->value);
14900  }
14901  else if (!soap_match_tag(soap, tp->name, "SOAP-ENC:position"))
14902  {
14904  }
14905  else if (!soap_match_tag(soap, tp->name, "SOAP-ENC:root"))
14906  {
14907  soap->root = ((!strcmp(tp->value, "1") || !strcmp(tp->value, "true")));
14908  }
14909  else if (!soap_match_tag(soap, tp->name, "SOAP-ENV:mustUnderstand")
14910  && (!strcmp(tp->value, "1") || !strcmp(tp->value, "true")))
14911  {
14912  soap->mustUnderstand = 1;
14913  }
14914  else if (!soap_match_tag(soap, tp->name, "SOAP-ENV:actor"))
14915  {
14916  if ((!soap->actor || strcmp(soap->actor, tp->value))
14917  && strcmp(tp->value, "http://schemas.xmlsoap.org/soap/actor/next"))
14918  soap->other = 1;
14919  }
14920  }
14921  else if (soap->version == 2)
14922  {
14923 #ifndef WITH_NOIDREF
14924  if (!soap_match_tag(soap, tp->name, "SOAP-ENC:id"))
14925  {
14926  *soap->id = '#';
14927  soap_strcpy(soap->id + 1, sizeof(soap->id) - 1, tp->value);
14928  }
14929  else if (!soap_match_tag(soap, tp->name, "SOAP-ENC:ref"))
14930  {
14931  *soap->href = '#';
14932  soap_strcpy(soap->href + (*tp->value != '#'), sizeof(soap->href) - 1, tp->value);
14933  }
14934  else
14935 #endif
14936  if (!soap_match_tag(soap, tp->name, "SOAP-ENC:itemType"))
14937  {
14938  soap_strcpy(soap->arrayType, sizeof(soap->arrayType), tp->value);
14939  }
14940  else if (!soap_match_tag(soap, tp->name, "SOAP-ENC:arraySize"))
14941  {
14942  soap_strcpy(soap->arraySize, sizeof(soap->arraySize), tp->value);
14943  }
14944  else if (!soap_match_tag(soap, tp->name, "SOAP-ENV:mustUnderstand")
14945  && (!strcmp(tp->value, "1") || !strcmp(tp->value, "true")))
14946  {
14947  soap->mustUnderstand = 1;
14948  }
14949  else if (!soap_match_tag(soap, tp->name, "SOAP-ENV:role"))
14950  {
14951  if ((!soap->actor || strcmp(soap->actor, tp->value))
14952  && strcmp(tp->value, "http://www.w3.org/2003/05/soap-envelope/role/next"))
14953  soap->other = 1;
14954  }
14955  }
14956  else
14957  {
14958  if (!soap_match_tag(soap, tp->name, "wsdl:required") && !strcmp(tp->value, "true"))
14959  soap->mustUnderstand = 1;
14960  }
14961  }
14962  }
14963 #ifdef WITH_DOM
14964  if (soap->feltbegin)
14965  return soap->error = soap->feltbegin(soap, soap->tag);
14966 #endif
14967  return soap->error = SOAP_OK;
14968 }
SOAP_FMAC1 int SOAP_FMAC2 soap_store_lab(struct soap *soap, const char *s, size_t n)
Definition: stdsoap2.cpp:14383
SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_getutf8(struct soap *soap)
Definition: stdsoap2.cpp:2220
SOAP_FMAC1 const char *SOAP_FMAC2 soap_current_namespace_att(struct soap *soap, const char *tag)
Definition: stdsoap2.cpp:3694
static int soap_getattrval(struct soap *, char *, size_t *, soap_wchar)
Definition: stdsoap2.cpp:14238
SOAP_FMAC1 int SOAP_FMAC2 soap_getposition(const char *attr, int *pos)
Definition: stdsoap2.cpp:3512
SOAP_FMAC1 const char *SOAP_FMAC2 soap_current_namespace_tag(struct soap *soap, const char *tag)
Definition: stdsoap2.cpp:3650
#define soap_strrchr(s, t)
Definition: stdsoap2.h:3076
const char * ns
Definition: stdsoap2.h:2084

References soap::actor, soap::arrayOffset, soap::arraySize, soap::arrayType, soap::attributes, soap_dom_element::atts, soap::blist, soap::body, mpq::c, soap_dom_element::code, DBGLOG, soap::dom, soap_dom_element::elts, soap::encodingStyle, soap::error, soap::feltbegin, soap::href, soap::id, soap::imode, mpq::l, soap::labbuf, soap::labidx, soap::lablen, soap_dom_element::lead, soap::mode, soap::mustUnderstand, soap_attribute::name, soap_dom_element::name, soap_attribute::next, soap_dom_attribute::next, soap_dom_element::next, soap_dom_element::node, soap_attribute::ns, soap_dom_element::nstr, soap::null, NULL, soap::other, soap::peeked, soap::position, soap::positions, soap_dom_element::prnt, soap::root, soap_blist::size, soap_attribute::size, soap, soap_dom_element::soap, soap_alloc_block(), SOAP_AP, soap_append_lab(), SOAP_BLKLEN, SOAP_CHK_EOF, soap_coblank, soap_current_namespace_att(), soap_current_namespace_tag(), SOAP_ENC_DIME, SOAP_ENC_LATIN, SOAP_ENC_MTOM, SOAP_EOM, SOAP_FREE, soap_get(), soap_get0, soap_get1, soap_getattrval(), soap_getchar(), soap_getposition(), soap_getutf8(), SOAP_LABLEN, SOAP_LT, SOAP_MALLOC, soap_malloc(), soap_match_tag(), SOAP_MAXALLOCSIZE, soap_memcpy, SOAP_NO_TAG, SOAP_OK, soap_pop_namespace(), soap_push_block(), soap_push_namespace(), SOAP_QT, soap_save_block(), soap_size_block(), soap_store_lab(), SOAP_STR_EOS, SOAP_STRCMP, soap_strcpy, soap_strdup(), soap_strncpy, soap_strrchr, SOAP_SYNTAX_ERROR, soap_unget, SOAP_UTF_ERROR, soap_version(), SOAP_XML_DOM, SOAP_XML_GRAPH, SOAP_XML_TREE, soap::tag, soap_dom_element::tail, TEST(), soap_dom_element::text, soap::tmpbuf, soap_dom_element::type, soap::type, soap_attribute::value, soap::version, and soap_attribute::visible.

Referenced by soap_element_begin_in(), soap_getelement(), soap_ignore_element(), soap_serve_request(), and soap_xop_forward().

◆ soap_pointer_enter()

SOAP_FMAC1 int SOAP_FMAC2 soap_pointer_enter ( struct soap soap,
const void *  p,
const void *  a,
int  n,
int  t,
struct soap_plist **  ppp 
)

Definition at line 9679 of file stdsoap2.cpp.

9680 {
9681  size_t h;
9682  struct soap_plist *pp;
9683  (void)n;
9684  if (!soap->pblk || soap->pidx >= SOAP_PTRBLK)
9685  {
9686  struct soap_pblk *pb = (struct soap_pblk*)SOAP_MALLOC(soap, sizeof(struct soap_pblk));
9687  if (!pb)
9688  {
9689  soap->error = SOAP_EOM;
9690  return 0;
9691  }
9692  pb->next = soap->pblk;
9693  soap->pblk = pb;
9694  soap->pidx = 0;
9695  }
9696  *ppp = pp = &soap->pblk->plist[soap->pidx++];
9697  if (a)
9698  h = soap_hash_ptr(a);
9699  else
9700  h = soap_hash_ptr(p);
9701  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Pointer enter location=%p array=%p size=%lu type=%d id=%d\n", p, a, (unsigned long)n, type, soap->idnum+1));
9702  pp->next = soap->pht[h];
9703  pp->type = type;
9704  pp->mark1 = 0;
9705  pp->mark2 = 0;
9706  pp->ptr = p;
9707  pp->dup = NULL;
9708  pp->array = a;
9709  pp->size = n;
9710  soap->pht[h] = pp;
9711  pp->id = ++soap->idnum;
9712  return pp->id;
9713 }
#define SOAP_PTRBLK
Definition: stdsoap2.h:1179
struct soap_plist plist[SOAP_PTRBLK]
Definition: stdsoap2.h:2052
struct soap_pblk * next
Definition: stdsoap2.h:2051
const void * ptr
Definition: stdsoap2.h:2038
struct soap_pblk * pblk
Definition: stdsoap2.h:2713
short pidx
Definition: stdsoap2.h:2714

References mpq::a, soap_plist::array, DBGLOG, soap_plist::dup, soap::error, soap_plist::id, soap::idnum, soap_plist::mark1, soap_plist::mark2, soap_plist::next, soap_pblk::next, NULL, soap::pblk, soap::pht, soap::pidx, soap_pblk::plist, soap_plist::ptr, soap_plist::size, SOAP_EOM, soap_hash_ptr, SOAP_MALLOC, SOAP_PTRBLK, TEST(), and soap_plist::type.

Referenced by soap_array_reference(), soap_attachment(), soap_attachment_reference(), soap_check_and_mark(), soap_mark_lookup(), and soap_reference().

◆ soap_pointer_lookup()

SOAP_FMAC1 int SOAP_FMAC2 soap_pointer_lookup ( struct soap soap,
const void *  p,
int  t,
struct soap_plist **  ppp 
)

Definition at line 9654 of file stdsoap2.cpp.

9655 {
9656  struct soap_plist *pp;
9657  *ppp = NULL;
9658  if (p)
9659  {
9660  for (pp = soap->pht[soap_hash_ptr(p)]; pp; pp = pp->next)
9661  {
9662  if (pp->ptr == p && pp->type == type)
9663  {
9664  *ppp = pp;
9665  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Lookup location=%p type=%d id=%d\n", p, type, pp->id));
9666  return pp->id;
9667  }
9668  }
9669  }
9670  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Lookup location=%p type=%d: not found\n", p, type));
9671  return 0;
9672 }

References DBGLOG, soap_plist::id, soap_plist::next, NULL, soap::pht, soap_plist::ptr, soap_hash_ptr, TEST(), and soap_plist::type.

Referenced by soap_check_and_mark(), soap_element_id(), soap_embed(), soap_embedded(), soap_embedded_id(), soap_mark_lookup(), and soap_reference().

◆ soap_pointer_lookup_id()

SOAP_FMAC1 int SOAP_FMAC2 soap_pointer_lookup_id ( struct soap ,
void *  p,
int  t,
struct soap_plist **   
)

◆ soap_poll()

SOAP_FMAC1 int SOAP_FMAC2 soap_poll ( struct soap soap)

Definition at line 6907 of file stdsoap2.cpp.

6908 {
6909 #ifndef WITH_LEAN
6910  int r;
6912  {
6914  if (r > 0 && (r & SOAP_TCP_SELECT_ERR))
6915  r = -1;
6916  }
6917  else if (soap_valid_socket(soap->master))
6918  {
6920  }
6921  else
6922  {
6923  return SOAP_OK; /* OK when no socket! */
6924  }
6925  if (r > 0)
6926  {
6927  int t;
6928 #ifdef WITH_OPENSSL
6929  if ((soap->imode & SOAP_ENC_SSL) && soap->ssl)
6930  {
6932  && (r & SOAP_TCP_SELECT_SND)
6933  && (!(r & SOAP_TCP_SELECT_RCV)
6934  || SSL_peek(soap->ssl, (char*)&t, 1) > 0))
6935  return SOAP_OK;
6936  }
6937  else
6938 #endif
6939  {
6941  && (r & SOAP_TCP_SELECT_SND)
6942  && (!(r & SOAP_TCP_SELECT_RCV)
6943  || recv(soap->socket, (char*)&t, 1, MSG_PEEK) > 0))
6944  return SOAP_OK;
6945  }
6946  }
6947  else if (r < 0)
6948  {
6951  return soap_set_receiver_error(soap, tcp_error(soap), "select failed in soap_poll()", SOAP_TCP_ERROR);
6952  }
6953  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_poll: other end down on socket=%d select=%d\n", (int)soap->socket, r));
6954  return SOAP_EOF;
6955 #else
6956  (void)soap;
6957  return SOAP_OK;
6958 #endif
6959 }
#define SOAP_TCP_SELECT_ERR
Definition: stdsoap2.cpp:270
#define SOAP_TCP_SELECT_SND
Definition: stdsoap2.cpp:269
#define SOAP_TCP_SELECT_RCV
Definition: stdsoap2.cpp:268
#define SOAP_ENC_SSL
Definition: stdsoap2.h:1707

References DBGLOG, soap::imode, soap::master, SOAP_EINTR, SOAP_ENC_SSL, SOAP_EOF, SOAP_OK, soap_set_receiver_error(), soap_socket_errno, SOAP_TCP_ERROR, SOAP_TCP_SELECT_ALL, SOAP_TCP_SELECT_ERR, SOAP_TCP_SELECT_RCV, SOAP_TCP_SELECT_SND, soap_valid_socket, soap::socket, soap::ssl, tcp_error(), tcp_select(), and TEST().

Referenced by soap_done(), and soap_init().

◆ soap_pop_block()

SOAP_FMAC1 void SOAP_FMAC2 soap_pop_block ( struct soap soap,
struct soap_blist b 
)

Definition at line 2958 of file stdsoap2.cpp.

2959 {
2960  struct soap_bhead *p;
2961  if (!b)
2962  b = soap->blist;
2963  if (!b || !b->head)
2964  return;
2965  p = b->head;
2966  b->size -= p->size;
2967  b->head = p->next;
2968  b->item--;
2969  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Pop block %p (%lu items of %lu bytes total)\n", (void*)p, (unsigned long)b->item, (unsigned long)b->size));
2970  SOAP_FREE(soap, p);
2971 }
size_t size
Definition: stdsoap2.h:2022

References b, soap::blist, DBGLOG, soap_bhead::next, soap_bhead::size, SOAP_FREE, and TEST().

◆ soap_pop_namespace()

SOAP_FMAC1 void SOAP_FMAC2 soap_pop_namespace ( struct soap soap)

Definition at line 3604 of file stdsoap2.cpp.

3605 {
3606  struct soap_nlist *np, *nq;
3607  for (np = soap->nlist; np && np->level >= soap->level; np = nq)
3608  {
3609  nq = np->next;
3610  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Pop namespace binding (level=%u) '%s' level=%u\n", soap->level, np->id, np->level));
3611  SOAP_FREE(soap, np);
3612  }
3613  soap->nlist = np;
3614 }

References DBGLOG, soap_nlist::id, soap_nlist::level, soap::level, soap_nlist::next, soap::nlist, SOAP_FREE, and TEST().

Referenced by soap_element_end(), soap_element_end_in(), soap_element_start_end_out(), and soap_peek_element().

◆ soap_POST()

SOAP_FMAC1 int SOAP_FMAC2 soap_POST ( struct soap soap,
const char *  endpoint,
const char *  action,
const char *  type 
)

◆ soap_post_check_mime_attachments()

SOAP_FMAC1 void SOAP_FMAC2 soap_post_check_mime_attachments ( struct soap soap)

Definition at line 19674 of file stdsoap2.cpp.

19675 {
19677 }

References soap::imode, and SOAP_MIME_POSTCHECK.

◆ soap_print_fault()

SOAP_FMAC1 void SOAP_FMAC2 soap_print_fault ( struct soap soap,
FILE *  fd 
)

Definition at line 22667 of file stdsoap2.cpp.

22668 {
22669  if (soap_check_state(soap))
22670  {
22671  fprintf(fd, "Error: soap struct state not initialized\n");
22672  }
22673  else if (soap->error)
22674  {
22675  const char **c, *v = NULL, *s, *d;
22676  c = soap_faultcode(soap);
22677  if (!*c)
22678  {
22680  c = soap_faultcode(soap);
22681  }
22682  if (soap->version == 2)
22683  v = soap_fault_subcode(soap);
22684  s = soap_fault_string(soap);
22686  fprintf(fd, "%s%d fault %s [%s]\n\"%s\"\nDetail: %s\n", soap->version ? "SOAP 1." : "Error ", soap->version ? (int)soap->version : soap->error, *c, v ? v : "no subcode", s ? s : "[no reason]", d ? d : "[no detail]");
22687  }
22688 }
d
Definition: mpq.py:298
SOAP_FMAC3 const char **SOAP_FMAC4 soap_faultcode(struct soap *soap)
Definition: soapC.cpp:90
SOAP_FMAC3 const char *SOAP_FMAC4 soap_fault_string(struct soap *soap)
Definition: soapC.cpp:132
SOAP_FMAC3 const char *SOAP_FMAC4 soap_fault_subcode(struct soap *soap)
Definition: soapC.cpp:116
SOAP_FMAC3 const char *SOAP_FMAC4 soap_fault_detail(struct soap *soap)
Definition: soapC.cpp:153
SOAP_FMAC1 void SOAP_FMAC2 soap_set_fault(struct soap *soap)
Definition: stdsoap2.cpp:21965

References mpq::c, mpq::d, soap::error, fprintf(), NULL, soap_check_state, soap_fault_detail(), soap_fault_string(), soap_fault_subcode(), soap_faultcode(), soap_set_fault(), and soap::version.

◆ soap_print_fault_location()

SOAP_FMAC1 void SOAP_FMAC2 soap_print_fault_location ( struct soap soap,
FILE *  fd 
)

Definition at line 22784 of file stdsoap2.cpp.

22785 {
22786 #ifndef WITH_LEAN
22787  int i, j, c1, c2;
22788  if (soap_check_state(soap) == SOAP_OK && soap->error && soap->error != SOAP_STOP && soap->bufidx <= soap->buflen && soap->buflen > 0 && soap->buflen <= sizeof(soap->buf))
22789  {
22790  i = (int)soap->bufidx - 1;
22791  if (i <= 0)
22792  i = 0;
22793  c1 = soap->buf[i];
22794  soap->buf[i] = '\0';
22795  if ((int)soap->buflen >= i + 1024)
22796  j = i + 1023;
22797  else
22798  j = (int)soap->buflen - 1;
22799  c2 = soap->buf[j];
22800  soap->buf[j] = '\0';
22801  fprintf(fd, "%s%c\n<!-- ** HERE ** -->\n", soap->buf, c1);
22802  if (soap->bufidx < soap->buflen)
22803  fprintf(fd, "%s\n", soap->buf + soap->bufidx);
22804  soap->buf[i] = (char)c1;
22805  soap->buf[j] = (char)c2;
22806  }
22807 #else
22808  (void)soap;
22809  (void)fd;
22810 #endif
22811 }

References soap::buf, soap::bufidx, soap::buflen, soap::error, fprintf(), if(), soap_check_state, SOAP_OK, and SOAP_STOP.

◆ soap_push_block()

SOAP_FMAC1 void* SOAP_FMAC2 soap_push_block ( struct soap soap,
struct soap_blist b,
size_t  n 
)

Definition at line 2910 of file stdsoap2.cpp.

2911 {
2912  struct soap_bhead *p;
2913  if (!b)
2914  b = soap->blist;
2915  if (!b
2916  || b->size + n < b->size
2917  || sizeof(struct soap_bhead) + n < n
2918  || (SOAP_MAXALLOCSIZE > 0 && sizeof(struct soap_bhead) + n > SOAP_MAXALLOCSIZE))
2919  {
2920  soap->error = SOAP_EOM;
2921  return NULL;
2922  }
2923  p = (struct soap_bhead*)SOAP_MALLOC(soap, sizeof(struct soap_bhead) + n);
2924  if (!p)
2925  {
2926  soap->error = SOAP_EOM;
2927  return NULL;
2928  }
2929  p->next = b->head;
2930  b->head = p;
2931  p->size = n;
2932  b->size += n;
2933  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push block %p of %u bytes on %lu previous blocks (%lu bytes total)\n", (void*)p, (unsigned int)n, (unsigned long)b->item, (unsigned long)b->size));
2934  b->item++;
2935  return (void*)(p + 1); /* skip block header and point to n allocated bytes */
2936 }

References b, soap::blist, DBGLOG, soap::error, soap_bhead::next, NULL, soap_bhead::size, SOAP_EOM, SOAP_MALLOC, SOAP_MAXALLOCSIZE, and TEST().

Referenced by soap_end_send_flush(), soap_flush_raw(), soap_getdime(), soap_gethex(), soap_http_get_body_prefix(), soap_peek_element(), soap_push_block_max(), soap_QName(), soap_QName2s(), soap_recv_mime_attachment(), soap_string_in(), and soap_wstring_in().

◆ soap_push_block_max()

SOAP_FMAC1 void* SOAP_FMAC2 soap_push_block_max ( struct soap soap,
struct soap_blist b,
size_t  n 
)

Definition at line 2943 of file stdsoap2.cpp.

2944 {
2945  if (b && b->item >= soap->maxoccurs) /* restrict block array length */
2946  {
2947  soap->error = SOAP_OCCURS;
2948  return NULL;
2949  }
2950  return soap_push_block(soap, b, n);
2951 }

References b, soap::error, soap::maxoccurs, NULL, SOAP_OCCURS, and soap_push_block().

◆ soap_push_namespace()

SOAP_FMAC1 struct soap_nlist* SOAP_FMAC2 soap_push_namespace ( struct soap soap,
const char *  id,
const char *  ns 
)

Definition at line 3535 of file stdsoap2.cpp.

3536 {
3537  struct soap_nlist *np = NULL;
3538  struct Namespace *p;
3539  short i = -1;
3540  size_t n, k;
3541  n = strlen(id);
3542  k = strlen(ns) + 1;
3543  p = soap->local_namespaces;
3544  if (p)
3545  {
3546  for (i = 0; p->id; p++, i++)
3547  {
3548  if (p->ns && !strcmp(ns, p->ns))
3549  break;
3550  if (p->out)
3551  {
3552  if (!strcmp(ns, p->out))
3553  break;
3554  }
3555  else if (p->in)
3556  {
3557  if (!soap_tag_cmp(ns, p->in))
3558  {
3559  if (SOAP_MAXALLOCSIZE <= 0 || k <= SOAP_MAXALLOCSIZE)
3560  p->out = (char*)SOAP_MALLOC(soap, k);
3561  if (p->out)
3562  soap_strcpy(p->out, k, ns);
3563  break;
3564  }
3565  }
3566  }
3567  if (!p->id)
3568  i = -1;
3569  }
3570  if (i >= 0)
3571  k = 0;
3572  if (sizeof(struct soap_nlist) + n + k > n && (SOAP_MAXALLOCSIZE <= 0 || sizeof(struct soap_nlist) + n + k <= SOAP_MAXALLOCSIZE))
3573  np = (struct soap_nlist*)SOAP_MALLOC(soap, sizeof(struct soap_nlist) + n + k);
3574  if (!np)
3575  {
3576  soap->error = SOAP_EOM;
3577  return NULL;
3578  }
3579  np->next = soap->nlist;
3580  soap->nlist = np;
3581  np->level = soap->level;
3582  np->index = i;
3583  soap_strcpy((char*)np->id, n + 1, id);
3584  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push namespace binding (level=%u,index=%hd) '%s'='%s'\n", soap->level, i, id, ns));
3585  if (i < 0)
3586  {
3587  np->ns = np->id + n + 1;
3588  soap_strcpy((char*)np->ns, k, ns);
3589  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push NOT OK: no match found for '%s' in namespace mapping table (added to stack anyway)\n", ns));
3590  }
3591  else
3592  {
3593  np->ns = NULL;
3594  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push OK ('%s' matches '%s' in namespace table)\n", id, p->id));
3595  }
3596  return np;
3597 }
const char * in
Definition: stdsoap2.h:2004

References DBGLOG, soap::error, Namespace::id, soap_nlist::id, Namespace::in, soap_nlist::index, soap_nlist::level, soap::level, soap::local_namespaces, soap_nlist::next, soap::nlist, Namespace::ns, soap_nlist::ns, NULL, Namespace::out, SOAP_EOM, SOAP_MALLOC, SOAP_MAXALLOCSIZE, soap_strcpy, soap_tag_cmp(), and TEST().

Referenced by soap_copy_stream(), soap_peek_element(), and soap_set_namespaces().

◆ soap_PUT()

SOAP_FMAC1 int SOAP_FMAC2 soap_PUT ( struct soap soap,
const char *  endpoint,
const char *  action,
const char *  type 
)

◆ soap_putbase64()

SOAP_FMAC1 int SOAP_FMAC2 soap_putbase64 ( struct soap soap,
const unsigned char *  s,
int  n 
)

Definition at line 2469 of file stdsoap2.cpp.

2470 {
2471  char d[4 * SOAP_BINARY_BUFLEN], *p = d;
2472  if (!s)
2473  return SOAP_OK;
2474 #ifdef WITH_DOM
2475  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
2476  {
2477  soap->dom->text = soap_s2base64(soap, s, NULL, n);
2478  if (!soap->dom->text)
2479  return soap->error;
2480  return SOAP_OK;
2481  }
2482 #endif
2483  for (; n > 2; n -= 3, s += 3)
2484  {
2485  p[0] = soap_base64o[(s[0] & 0xFC) >> 2];
2486  p[1] = soap_base64o[((s[0] & 0x03) << 4) | ((s[1] & 0xF0) >> 4)];
2487  p[2] = soap_base64o[((s[1] & 0x0F) << 2) | ((s[2] & 0xC0) >> 6)];
2488  p[3] = soap_base64o[s[2] & 0x3F];
2489  p += 4;
2490  if (p - d == sizeof(d))
2491  {
2492  if (soap_send_raw(soap, d, sizeof(d)))
2493  return soap->error;
2494  p = d;
2495  }
2496  }
2497  if (n == 2)
2498  {
2499  p[0] = soap_base64o[(s[0] & 0xFC) >> 2];
2500  p[1] = soap_base64o[((s[0] & 0x03) << 4) | ((s[1] & 0xF0) >> 4)];
2501  p[2] = soap_base64o[(s[1] & 0x0F) << 2];
2502  p[3] = '=';
2503  p += 4;
2504  }
2505  else if (n == 1)
2506  {
2507  p[0] = soap_base64o[(s[0] & 0xFC) >> 2];
2508  p[1] = soap_base64o[(s[0] & 0x03) << 4];
2509  p[2] = '=';
2510  p[3] = '=';
2511  p += 4;
2512  }
2513  if (p != d && soap_send_raw(soap, d, p - d))
2514  return soap->error;
2515  return SOAP_OK;
2516 }
SOAP_FMAC1 char *SOAP_FMAC2 soap_s2base64(struct soap *soap, const unsigned char *s, char *t, int n)
Definition: stdsoap2.cpp:21586
const char soap_base64o[65]
Definition: stdsoap2.cpp:332
#define SOAP_BINARY_BUFLEN
Definition: stdsoap2.h:631

References mpq::d, soap::dom, soap::error, soap::mode, NULL, soap_base64o, SOAP_BINARY_BUFLEN, SOAP_OK, soap_s2base64(), soap_send_raw(), SOAP_XML_DOM, and soap_dom_element::text.

◆ soap_putdime()

SOAP_FMAC1 int SOAP_FMAC2 soap_putdime ( struct soap soap)

Definition at line 19249 of file stdsoap2.cpp.

19250 {
19251  struct soap_multipart *content;
19252  if (!(soap->mode & SOAP_ENC_DIME))
19253  return SOAP_OK;
19254  for (content = soap->dime.first; content; content = content->next)
19255  {
19256  void *handle;
19257  soap->dime.size = content->size;
19258  soap->dime.id = content->id;
19259  soap->dime.type = content->type;
19260  soap->dime.options = content->options;
19262  if (soap->fdimereadopen && ((handle = soap->fdimereadopen(soap, (void*)content->ptr, content->id, content->type, content->options)) != NULL || soap->error))
19263  {
19264  size_t size = content->size;
19265  if (!handle)
19266  {
19267  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimereadopen failed\n"));
19268  return soap->error;
19269  }
19270  if (!size && ((soap->mode & SOAP_ENC_PLAIN) || (soap->mode & SOAP_IO) == SOAP_IO_CHUNK || (soap->mode & SOAP_IO) == SOAP_IO_STORE))
19271  {
19272  size_t chunksize = sizeof(soap->tmpbuf);
19273  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunked streaming DIME\n"));
19274  do
19275  {
19276  size = soap->fdimeread(soap, handle, soap->tmpbuf, chunksize);
19277  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimeread returned %lu bytes\n", (unsigned long)size));
19278  if (size < chunksize)
19279  {
19280  soap->dime.flags &= ~SOAP_DIME_CF;
19281  if (!content->next)
19283  }
19284  else
19285  {
19287  }
19288  soap->dime.size = size;
19289  if (soap_putdimehdr(soap)
19291  break;
19292  if (soap->dime.id)
19293  {
19295  soap->dime.id = NULL;
19296  soap->dime.type = NULL;
19297  soap->dime.options = NULL;
19298  }
19299  } while (size >= chunksize);
19300  }
19301  else
19302  {
19303  if (!content->next)
19305  if (soap_putdimehdr(soap))
19306  return soap->error;
19307  do
19308  {
19309  size_t bufsize;
19310  if (size < sizeof(soap->tmpbuf))
19311  bufsize = size;
19312  else
19313  bufsize = sizeof(soap->tmpbuf);
19314  bufsize = soap->fdimeread(soap, handle, soap->tmpbuf, bufsize);
19315  if (!bufsize)
19316  {
19317  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimeread failed: insufficient data (%lu bytes remaining from %lu bytes)\n", (unsigned long)size, (unsigned long)content->size));
19318  soap->error = SOAP_CHK_EOF;
19319  break;
19320  }
19321  if (soap_send_raw(soap, soap->tmpbuf, bufsize))
19322  break;
19323  size -= bufsize;
19324  } while (size);
19325  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimereadclose\n"));
19326  if (soap_send_raw(soap, SOAP_STR_PADDING, -(long)soap->dime.size&3))
19327  return soap->error;
19328  }
19329  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimereadclose\n"));
19330  if (soap->fdimereadclose)
19331  soap->fdimereadclose(soap, handle);
19332  }
19333  else
19334  {
19335  if (!content->next)
19337  if (soap_putdimehdr(soap)
19338  || soap_putdimefield(soap, (char*)content->ptr, content->size))
19339  return soap->error;
19340  }
19341  }
19342  return SOAP_OK;
19343 }
size_t chunksize
Definition: chunk.c:27
static int soap_putdimefield(struct soap *, const char *, size_t)
Definition: stdsoap2.cpp:19162
#define SOAP_STR_PADDING
Definition: stdsoap2.cpp:347
SOAP_FMAC1 int SOAP_FMAC2 soap_putdimehdr(struct soap *soap)
Definition: stdsoap2.cpp:19203
#define SOAP_DIME_MEDIA
Definition: stdsoap2.h:1675
const char * ptr
Definition: stdsoap2.h:2194

References chunksize, DBGLOG, soap::dime, soap::error, soap::fdimeread, soap::fdimereadclose, soap::fdimereadopen, soap_dime::first, soap_dime::flags, soap_dime::id, soap_multipart::id, if(), soap::mode, soap_multipart::next, NULL, soap_dime::options, soap_multipart::options, soap_multipart::ptr, soap_dime::size, soap_multipart::size, SOAP_CHK_EOF, SOAP_DIME_CF, SOAP_DIME_MB, SOAP_DIME_ME, SOAP_DIME_MEDIA, SOAP_DIME_VERSION, SOAP_ENC_DIME, SOAP_ENC_PLAIN, SOAP_IO, SOAP_IO_CHUNK, SOAP_IO_STORE, SOAP_OK, soap_putdimefield(), soap_putdimehdr(), soap_send_raw(), SOAP_STR_PADDING, TEST(), soap::tmpbuf, soap_dime::type, and soap_multipart::type.

Referenced by soap_end_send().

◆ soap_putdimehdr()

SOAP_FMAC1 int SOAP_FMAC2 soap_putdimehdr ( struct soap soap)

Definition at line 19203 of file stdsoap2.cpp.

19204 {
19205  unsigned char tmp[12];
19206  size_t optlen = 0, idlen = 0, typelen = 0;
19207  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Put DIME header id='%s'\n", soap->dime.id ? soap->dime.id : SOAP_STR_EOS));
19208  if (soap->dime.options)
19209  optlen = (((unsigned char)soap->dime.options[2] << 8) | ((unsigned char)soap->dime.options[3])) + 4;
19210  if (soap->dime.id)
19211  {
19212  idlen = strlen(soap->dime.id);
19213  if (idlen > 0x0000FFFF)
19214  idlen = 0x0000FFFF;
19215  }
19216  if (soap->dime.type)
19217  {
19218  typelen = strlen(soap->dime.type);
19219  if (typelen > 0x0000FFFF)
19220  typelen = 0x0000FFFF;
19221  }
19222  tmp[0] = SOAP_DIME_VERSION | (soap->dime.flags & 0x7);
19223  tmp[1] = soap->dime.flags & 0xF0;
19224  tmp[2] = (char)(optlen >> 8);
19225  tmp[3] = (char)(optlen & 0xFF);
19226  tmp[4] = (char)(idlen >> 8);
19227  tmp[5] = (char)(idlen & 0xFF);
19228  tmp[6] = (char)(typelen >> 8);
19229  tmp[7] = (char)(typelen & 0xFF);
19230  tmp[8] = (char)(soap->dime.size >> 24);
19231  tmp[9] = (char)((soap->dime.size >> 16) & 0xFF);
19232  tmp[10] = (char)((soap->dime.size >> 8) & 0xFF);
19233  tmp[11] = (char)(soap->dime.size & 0xFF);
19234  if (soap_send_raw(soap, (char*)tmp, 12)
19235  || soap_putdimefield(soap, soap->dime.options, optlen)
19236  || soap_putdimefield(soap, soap->dime.id, idlen)
19237  || soap_putdimefield(soap, soap->dime.type, typelen))
19238  return soap->error;
19239  return SOAP_OK;
19240 }

References DBGLOG, soap::dime, soap::error, soap_dime::flags, soap_dime::id, soap_dime::options, soap_dime::size, SOAP_DIME_VERSION, SOAP_OK, soap_putdimefield(), soap_send_raw(), SOAP_STR_EOS, TEST(), and soap_dime::type.

Referenced by soap_begin_attachments(), and soap_putdime().

◆ soap_putfault()

SOAP_FMAC3 int SOAP_FMAC4 soap_putfault ( struct soap soap)

Definition at line 78 of file soapC.cpp.

79 {
80  if (soap->fault)
81  return soap_put_SOAP_ENV__Fault(soap, soap->fault, "SOAP-ENV:Fault", "");
82  return SOAP_OK;
83 }
SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Fault(struct soap *soap, const struct SOAP_ENV__Fault *a, const char *tag, const char *type)
Definition: soapC.cpp:801

References soap::fault, SOAP_OK, and soap_put_SOAP_ENV__Fault().

Referenced by soap_send_fault().

◆ soap_putheader()

SOAP_FMAC3 int SOAP_FMAC4 soap_putheader ( struct soap soap)

Definition at line 34 of file soapC.cpp.

35 {
36  if (soap->version && soap->header)
38  if (soap_out_SOAP_ENV__Header(soap, "SOAP-ENV:Header", 0, soap->header, ""))
39  return soap->error;
41  }
42  return SOAP_OK;
43 }
SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Header(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Header *a, const char *type)
Definition: soapC.cpp:1179

References soap::error, soap::header, soap::part, SOAP_END_HEADER, SOAP_IN_HEADER, SOAP_OK, soap_out_SOAP_ENV__Header(), and soap::version.

Referenced by soap_send_fault(), and soap_serve_ns1__executeCommand().

◆ soap_puthex()

SOAP_FMAC1 int SOAP_FMAC2 soap_puthex ( struct soap soap,
const unsigned char *  s,
int  n 
)

Definition at line 2303 of file stdsoap2.cpp.

2304 {
2305  char d[2 * SOAP_BINARY_BUFLEN], *p = d;
2306 #ifdef WITH_DOM
2307  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
2308  {
2309  soap->dom->text = soap_s2hex(soap, s, NULL, n);
2310  if (!soap->dom->text)
2311  return soap->error;
2312  return SOAP_OK;
2313  }
2314 #endif
2315  for (; n > 0; n--)
2316  {
2317  int m = *s++;
2318  p[0] = (char)((m >> 4) + (m > 159 ? '7' : '0'));
2319  m &= 0x0F;
2320  p[1] = (char)(m + (m > 9 ? '7' : '0'));
2321  p += 2;
2322  if (p - d == sizeof(d))
2323  {
2324  if (soap_send_raw(soap, d, sizeof(d)))
2325  return soap->error;
2326  p = d;
2327  }
2328  }
2329  if (p != d && soap_send_raw(soap, d, p - d))
2330  return soap->error;
2331  return SOAP_OK;
2332 }
SOAP_FMAC1 char *SOAP_FMAC2 soap_s2hex(struct soap *soap, const unsigned char *s, char *t, int n)
Definition: stdsoap2.cpp:21722

References mpq::d, soap::dom, soap::error, soap::mode, NULL, SOAP_BINARY_BUFLEN, SOAP_OK, soap_s2hex(), soap_send_raw(), SOAP_XML_DOM, and soap_dom_element::text.

◆ soap_puthttphdr()

SOAP_FMAC1 int SOAP_FMAC2 soap_puthttphdr ( struct soap soap,
int  status,
ULONG64  count 
)

Definition at line 21878 of file stdsoap2.cpp.

21879 {
21880  int err = SOAP_OK;
21881  if (soap_http_content_type(soap, status))
21882  {
21883  err = soap->fposthdr(soap, "Content-Type", soap->tmpbuf);
21884  if (err)
21885  return err;
21886 #ifdef WITH_ZLIB
21887  if ((soap->omode & SOAP_ENC_ZLIB))
21888  {
21889 #ifdef WITH_GZIP
21890  err = soap->fposthdr(soap, "Content-Encoding", soap->zlib_out == SOAP_ZLIB_DEFLATE ? "deflate" : "gzip");
21891 #else
21892  err = soap->fposthdr(soap, "Content-Encoding", "deflate");
21893 #endif
21894  if (err)
21895  return err;
21896  }
21897 #endif
21898 #ifndef WITH_LEANER
21899  if ((soap->omode & SOAP_IO) == SOAP_IO_CHUNK)
21900  {
21901  err = soap->fposthdr(soap, "Transfer-Encoding", "chunked");
21902  }
21903  else
21904 #endif
21905  {
21907  err = soap->fposthdr(soap, "Content-Length", soap->tmpbuf);
21908  }
21909  if (err)
21910  return err;
21911  }
21912  if (soap->http_extra_header)
21913  {
21914  const char *header = soap->http_extra_header;
21915  soap->http_extra_header = NULL; /* use http_extra_header once (assign new value before each call) */
21916  if (*header)
21917  {
21918  err = soap_send(soap, header);
21919  if (err)
21920  return err;
21921  err = soap_send_raw(soap, "\r\n", 2);
21922  if (err)
21923  return err;
21924  }
21925  }
21926  if (soap->keep_alive)
21927  {
21928  if (soap->keep_alive > 0 && soap->recv_timeout)
21929  {
21930  int t = soap->recv_timeout;
21931  if (t < 0)
21932  t = 1;
21933  (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), 20), "timeout=%d, max=%d", soap->recv_timeout, soap->keep_alive);
21934  err = soap->fposthdr(soap, "Keep-Alive", soap->tmpbuf);
21935  if (err)
21936  return err;
21937  }
21938  return soap->fposthdr(soap, "Connection", "keep-alive");
21939  }
21940  return soap->fposthdr(soap, "Connection", "close");
21941 }
constexpr auto count() -> size_t
Definition: core.h:1039
SOAP_FMAC1 const char *SOAP_FMAC2 soap_http_content_type(struct soap *soap, int status)
Definition: stdsoap2.cpp:21794

References count(), soap::fposthdr, soap::http_extra_header, soap::keep_alive, NULL, soap::omode, soap::recv_timeout, SOAP_ENC_ZLIB, soap_http_content_type(), SOAP_IO, SOAP_IO_CHUNK, SOAP_OK, soap_send(), soap_send_raw(), SOAP_SNPRINTF, SOAP_ULONG_FORMAT, SOAP_ZLIB_DEFLATE, soap::tmpbuf, and soap::zlib_out.

Referenced by http_post(), and http_response().

◆ soap_putmime()

SOAP_FMAC1 int SOAP_FMAC2 soap_putmime ( struct soap soap)

Definition at line 20001 of file stdsoap2.cpp.

20002 {
20003  struct soap_multipart *content;
20004  if (!(soap->mode & SOAP_ENC_MIME) || !soap->mime.boundary)
20005  return SOAP_OK;
20006  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Sending MIME attachments\n"));
20007  for (content = soap->mime.first; content; content = content->next)
20008  {
20009  void *handle;
20010  if (soap->fmimereadopen && ((handle = soap->fmimereadopen(soap, (void*)content->ptr, content->id, content->type, content->description)) != NULL || soap->error))
20011  {
20012  size_t size = content->size;
20013  if (!handle)
20014  {
20015  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fmimereadopen failed\n"));
20016  return soap->error;
20017  }
20018  if (soap_putmimehdr(soap, content))
20019  return soap->error;
20020  if (!size)
20021  {
20023  {
20024  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunked streaming MIME\n"));
20025  do
20026  {
20027  size = soap->fmimeread(soap, handle, soap->tmpbuf, sizeof(soap->tmpbuf));
20028  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fmimeread returned %lu bytes\n", (unsigned long)size));
20029  if (soap_send_raw(soap, soap->tmpbuf, size))
20030  break;
20031  } while (size);
20032  }
20033  else
20034  {
20035  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Error: cannot chunk streaming MIME (no HTTP chunking)\n"));
20036  }
20037  }
20038  else
20039  {
20040  do
20041  {
20042  size_t bufsize;
20043  if (size < sizeof(soap->tmpbuf))
20044  bufsize = size;
20045  else
20046  bufsize = sizeof(soap->tmpbuf);
20047  bufsize = soap->fmimeread(soap, handle, soap->tmpbuf, bufsize);
20048  if (!bufsize)
20049  {
20050  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fmimeread failed: insufficient data (%lu bytes remaining from %lu bytes)\n", (unsigned long)size, (unsigned long)content->size));
20051  soap->error = SOAP_EOF;
20052  break;
20053  }
20054  if (soap_send_raw(soap, soap->tmpbuf, bufsize))
20055  break;
20056  size -= bufsize;
20057  } while (size);
20058  }
20059  if (soap->fmimereadclose)
20060  soap->fmimereadclose(soap, handle);
20061  }
20062  else
20063  {
20064  if (soap_putmimehdr(soap, content)
20065  || soap_send_raw(soap, content->ptr, content->size))
20066  return soap->error;
20067  }
20068  }
20069  return soap_send3(soap, "\r\n--", soap->mime.boundary, "--");
20070 }
SOAP_FMAC1 int SOAP_FMAC2 soap_putmimehdr(struct soap *soap, struct soap_multipart *content)
Definition: stdsoap2.cpp:19974
SOAP_FMAC1 int SOAP_FMAC2 soap_send3(struct soap *soap, const char *s1, const char *s2, const char *s3)
Definition: stdsoap2.cpp:976

References soap_mime::boundary, DBGLOG, soap_multipart::description, soap::error, soap_mime::first, soap::fmimeread, soap::fmimereadclose, soap::fmimereadopen, soap_multipart::id, soap::mime, soap::mode, soap_multipart::next, NULL, soap_multipart::ptr, soap_multipart::size, SOAP_ENC_MIME, SOAP_ENC_PLAIN, SOAP_EOF, SOAP_IO, SOAP_IO_CHUNK, SOAP_IO_STORE, SOAP_OK, soap_putmimehdr(), soap_send3(), soap_send_raw(), TEST(), soap::tmpbuf, and soap_multipart::type.

Referenced by soap_end_send().

◆ soap_putmimehdr()

SOAP_FMAC1 int SOAP_FMAC2 soap_putmimehdr ( struct soap soap,
struct soap_multipart content 
)

Definition at line 19974 of file stdsoap2.cpp.

19975 {
19976  const char *s;
19977  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "MIME attachment type='%s'\n", content->type ? content->type : SOAP_STR_EOS));
19978  if (soap_send3(soap, "\r\n--", soap->mime.boundary, "\r\n"))
19979  return soap->error;
19980  if (content->type && soap_send3(soap, "Content-Type: ", content->type, "\r\n"))
19981  return soap->error;
19982  s = soap_code_str(mime_codes, content->encoding);
19983  if (s && soap_send3(soap, "Content-Transfer-Encoding: ", s, "\r\n"))
19984  return soap->error;
19985  if (content->id && soap_send3(soap, "Content-ID: ", content->id, "\r\n"))
19986  return soap->error;
19987  if (content->location && soap_send3(soap, "Content-Location: ", content->location, "\r\n"))
19988  return soap->error;
19989  if (content->description && soap_send3(soap, "Content-Description: ", content->description, "\r\n"))
19990  return soap->error;
19991  return soap_send_raw(soap, "\r\n", 2);
19992 }
SOAP_FMAC1 const char *SOAP_FMAC2 soap_code_str(const struct soap_code_map *code_map, long code)
Definition: stdsoap2.cpp:1798

References soap_mime::boundary, DBGLOG, soap_multipart::description, soap_multipart::encoding, soap::error, soap_multipart::id, soap_multipart::location, soap::mime, mime_codes, soap_code_str(), soap_send3(), soap_send_raw(), SOAP_STR_EOS, TEST(), and soap_multipart::type.

Referenced by soap_putmime().

◆ soap_putoffsets()

SOAP_FMAC1 char* SOAP_FMAC2 soap_putoffsets ( struct soap soap,
const int *  offset,
int  dim 
)

Definition at line 3413 of file stdsoap2.cpp.

3414 {
3415  int i;
3416  soap->arrayOffset[0] = '\0';
3417  if (soap->version == 1)
3418  {
3419  (SOAP_SNPRINTF(soap->arrayOffset, sizeof(soap->arrayOffset) - 1, 20), "[%d", offset[0]);
3420  for (i = 1; i < dim; i++)
3421  {
3422  size_t l = strlen(soap->arrayOffset);
3423  (SOAP_SNPRINTF(soap->arrayOffset + l, sizeof(soap->arrayOffset) - l - 1, 20), ",%d", offset[i]);
3424  }
3425  soap_strcat(soap->arrayOffset, sizeof(soap->arrayOffset), "]");
3426  }
3427  return soap->arrayOffset;
3428 }

References soap::arrayOffset, mpq::l, SOAP_SNPRINTF, soap_strcat(), and soap::version.

◆ soap_putsizesoffsets()

SOAP_FMAC1 char* SOAP_FMAC2 soap_putsizesoffsets ( struct soap soap,
const char *  type,
const int *  size,
const int *  offset,
int  dim 
)

Definition at line 3378 of file stdsoap2.cpp.

3379 {
3380  int i;
3381  const char *t = ",%d";
3382  if (!type)
3383  return NULL;
3384  if (soap->version == 2)
3385  t = " %d";
3386  if (soap->version != 2 && offset)
3387  {
3388  (SOAP_SNPRINTF(soap->type, sizeof(soap->type) - 1, strlen(type) + 20), "%s[%d", type, size[0] + offset[0]);
3389  for (i = 1; i < dim; i++)
3390  {
3391  size_t l = strlen(soap->type);
3392  (SOAP_SNPRINTF(soap->type + l, sizeof(soap->type) - l - 1, 20), t, size[i] + offset[i]);
3393  }
3394  }
3395  else
3396  {
3397  (SOAP_SNPRINTF(soap->type, sizeof(soap->type) - 1, strlen(type) + 20), "%s[%d", type, size[0]);
3398  for (i = 1; i < dim; i++)
3399  {
3400  size_t l = strlen(soap->type);
3401  (SOAP_SNPRINTF(soap->type + l, sizeof(soap->type) - l - 1, 20), t, size[i]);
3402  }
3403  }
3404  soap_strcat(soap->type, sizeof(soap->type), "]");
3405  return soap->type;
3406 }

References mpq::l, NULL, soap_ilist::size, SOAP_SNPRINTF, soap_strcat(), soap::type, and soap::version.

◆ soap_pututf8()

SOAP_FMAC1 int SOAP_FMAC2 soap_pututf8 ( struct soap soap,
unsigned long  c 
)

Definition at line 2157 of file stdsoap2.cpp.

2158 {
2159  char tmp[24];
2160  if ((c < 0x7F && c > 0x1F))
2161  {
2162  *tmp = (char)c;
2163  return soap_send_raw(soap, tmp, 1);
2164  }
2165 #ifdef WITH_REPLACE_ILLEGAL_UTF8
2166  if (!(c == 0x09 || c == 0x0A || c == 0x0D || (c >= 0x80 && c <= 0xD7FF) || (c >= 0xE000 && c <= 0xFFFD) || (c >= 0x10000 && c <= 0x10FFFF)))
2167  c = SOAP_UNKNOWN_UNICODE_CHAR;
2168 #endif
2169 #ifndef WITH_LEAN
2170  if (c > 0x9F)
2171  {
2172  char *t = tmp;
2173  if (c < 0x0800)
2174  {
2175  *t++ = (char)(0xC0 | ((c >> 6) & 0x1F));
2176  }
2177  else
2178  {
2179  if (c < 0x010000)
2180  {
2181  *t++ = (char)(0xE0 | ((c >> 12) & 0x0F));
2182  }
2183  else
2184  {
2185  if (c < 0x200000)
2186  {
2187  *t++ = (char)(0xF0 | ((c >> 18) & 0x07));
2188  }
2189  else
2190  {
2191  if (c < 0x04000000)
2192  {
2193  *t++ = (char)(0xF8 | ((c >> 24) & 0x03));
2194  }
2195  else
2196  {
2197  *t++ = (char)(0xFC | ((c >> 30) & 0x01));
2198  *t++ = (char)(0x80 | ((c >> 24) & 0x3F));
2199  }
2200  *t++ = (char)(0x80 | ((c >> 18) & 0x3F));
2201  }
2202  *t++ = (char)(0x80 | ((c >> 12) & 0x3F));
2203  }
2204  *t++ = (char)(0x80 | ((c >> 6) & 0x3F));
2205  }
2206  *t++ = (char)(0x80 | (c & 0x3F));
2207  *t = '\0';
2208  }
2209  else
2210 #endif
2211  (SOAP_SNPRINTF(tmp, sizeof(tmp), 20), "&#x%lX;", c);
2212  return soap_send(soap, tmp);
2213 }

References mpq::c, soap_send(), soap_send_raw(), and SOAP_SNPRINTF.

Referenced by soap_outwliteral(), soap_string_out(), and soap_wstring_out().

◆ soap_QName2s()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_QName2s ( struct soap soap,
const char *  s 
)

Definition at line 17752 of file stdsoap2.cpp.

17753 {
17754  const char *t = NULL;
17755  if (s)
17756  {
17757 #ifdef WITH_FAST
17759  soap->labidx = 0;
17760 #else
17761  char *b = NULL;
17762  if (soap_alloc_block(soap) == NULL)
17763  return NULL;
17764 #endif
17765  for (;;)
17766  {
17767  size_t n;
17768  const char *q = NULL;
17769  const char *r = NULL;
17770  size_t m = 0;
17771 #ifndef WITH_FAST
17772  size_t k = 0;
17773 #endif
17774  /* skip blanks */
17775  while (*s && soap_coblank((soap_wchar)*s))
17776  s++;
17777  if (!*s)
17778  {
17779 #ifdef WITH_FAST
17780  soap->labbuf[soap->labidx > 0 ? soap->labidx - 1 : 0] = '\0';
17781 #else
17782  if (!b)
17783  return soap_strdup(soap, SOAP_STR_EOS);
17784  --b;
17785  *b = '\0';
17786 #endif
17787  break;
17788  }
17789  /* find next QName */
17790  n = 0;
17791  while (s[n] && !soap_coblank((soap_wchar)s[n]))
17792  {
17793  if (s[n] == ':')
17794  r = s;
17795  n++;
17796  }
17797  if (*s != '"') /* non-quoted: pass string as is */
17798  {
17799 #ifndef WITH_LEAN
17800  if (r && (soap->mode & SOAP_XML_CANONICAL) && !(soap->mode & SOAP_XML_CANONICAL_NA))
17801  soap_utilize_ns(soap, s, 1);
17802 #endif
17803  r = s;
17804  m = n + 1;
17805  }
17806  else /* prefix quoted URI-based string */
17807  {
17808  q = strchr(s + 1, '"');
17809  if (q)
17810  {
17811  struct Namespace *p = soap->local_namespaces;
17812  if (p)
17813  {
17814  for (; p->id; p++)
17815  {
17816  if (p->ns)
17817  if (!soap_tag_cmp(s + 1, p->ns))
17818  break;
17819  if (p->in)
17820  if (!soap_tag_cmp(s + 1, p->in))
17821  break;
17822  }
17823  }
17824  q++;
17825  /* URL is in the namespace table? */
17826  if (p && p->id)
17827  {
17828  r = p->id;
17829  m = strlen(r);
17830  }
17831  else /* not in namespace table: create xmlns binding */
17832  {
17833  char *x = soap_strdup(soap, s + 1);
17834  if (!x)
17835  return NULL;
17836  x[q - s - 2] = '\0';
17837  (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), 27), "xmlns:_%d", soap->idnum++);
17838  soap_set_attr(soap, soap->tmpbuf, x, 1);
17839  r = soap->tmpbuf + 6;
17840  m = strlen(r);
17841  }
17842  }
17843  }
17844  /* copy normalized QName into buffer, including the ending blank or NUL */
17845 #ifdef WITH_FAST
17846  if ((m && soap_append_lab(soap, r, m))
17847  || (q && soap_append_lab(soap, q, n - (q - s) + 1)))
17848  return NULL;
17849 #else
17850  k = m + (q ? n - (q - s) + 1 : 0);
17851  b = (char*)soap_push_block(soap, NULL, k);
17852  if (!b)
17853  {
17854  soap->error = SOAP_EOM;
17855  return NULL;
17856  }
17857  if (soap_memcpy((void*)b, k, (const void*)r, m))
17858  {
17859  soap->error = SOAP_EOM;
17860  return NULL;
17861  }
17862  b += m;
17863  if (q)
17864  {
17865  if (soap_memcpy((void*)b, k - m, (const void*)q, n - (q - s) + 1))
17866  {
17867  soap->error = SOAP_EOM;
17868  return NULL;
17869  }
17870  b += n - (q - s) + 1;
17871  }
17872 #endif
17873  /* advance to next */
17874  s += n;
17875  }
17876 #ifdef WITH_FAST
17877  t = soap_strdup(soap, soap->labbuf);
17878  if (!t)
17879  soap->error = SOAP_EOM;
17880 #else
17881  t = (char*)soap_save_block(soap, NULL, NULL, 0);
17882 #endif
17883  }
17884  return t;
17885 }
G3D::int16 x
Definition: Vector2int16.h:37

References b, soap::error, Namespace::id, soap::idnum, Namespace::in, soap::labbuf, soap::labidx, soap::local_namespaces, soap::mode, Namespace::ns, NULL, soap_alloc_block(), soap_append_lab(), soap_coblank, SOAP_EOM, soap_memcpy, soap_push_block(), soap_save_block(), soap_set_attr(), SOAP_SNPRINTF, soap_store_lab(), SOAP_STR_EOS, soap_strdup(), soap_tag_cmp(), soap_utilize_ns(), SOAP_XML_CANONICAL, SOAP_XML_CANONICAL_NA, soap::tmpbuf, and G3D::x.

Referenced by soap_out_SOAP_ENV__Code(), and soap_out_SOAP_ENV__Fault().

◆ soap_query()

SOAP_FMAC1 char* SOAP_FMAC2 soap_query ( struct soap soap)

Definition at line 1026 of file stdsoap2.cpp.

1027 {
1028  return strchr(soap->path, '?');
1029 }

References soap::path.

◆ soap_query_decode()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_query_decode ( char *  buf,
size_t  len,
const char *  val 
)

Definition at line 1076 of file stdsoap2.cpp.

1077 {
1078  const char *s;
1079  char *t;
1080  for (s = val; *s; s++)
1081  if (*s != ' ' && *s != '=')
1082  break;
1083  if (*s == '"')
1084  {
1085  t = buf;
1086  s++;
1087  while (*s && *s != '"' && --len)
1088  *t++ = *s++;
1089  *t = '\0';
1090  do s++;
1091  while (*s && *s != '&' && *s != '=');
1092  }
1093  else
1094  {
1095  t = buf;
1096  while (*s && *s != '&' && *s != '=' && --len)
1097  {
1098  switch (*s)
1099  {
1100  case '+':
1101  *t++ = ' ';
1102  s++;
1103  break;
1104  case '\t':
1105  case '\n':
1106  case '\r':
1107  case ' ':
1108  s++;
1109  break;
1110  case '%':
1111  *t++ = ((s[1] >= 'A' ? (s[1]&0x7) + 9 : s[1] - '0') << 4) + (s[2] >= 'A' ? (s[2]&0x7) + 9 : s[2] - '0');
1112  s += 3;
1113  break;
1114  default:
1115  *t++ = *s++;
1116  }
1117  }
1118  *t = '\0';
1119  }
1120  return s;
1121 }

Referenced by soap_query_key(), and soap_query_val().

◆ soap_query_key()

SOAP_FMAC1 char* SOAP_FMAC2 soap_query_key ( struct soap soap,
char **  s 
)

Definition at line 1038 of file stdsoap2.cpp.

1039 {
1040  char *t = *s;
1041  (void)soap;
1042  if (t && *t)
1043  {
1044  *s = (char*)soap_query_decode(t, strlen(t), t + 1);
1045  return t;
1046  }
1047  return *s = NULL;
1048 }
SOAP_FMAC1 const char *SOAP_FMAC2 soap_query_decode(char *buf, size_t len, const char *val)
Definition: stdsoap2.cpp:1076

References NULL, and soap_query_decode().

◆ soap_query_send_key()

SOAP_FMAC1 int SOAP_FMAC2 soap_query_send_key ( struct soap soap,
const char *  s 
)

Definition at line 991 of file stdsoap2.cpp.

992 {
993  if (!s)
994  return SOAP_OK;
995  if (!soap->body && soap_send_raw(soap, "&", 1))
996  return soap->error;
997  soap->body = 0;
998  (void)soap_encode_url(s, soap->msgbuf, (int)sizeof(soap->msgbuf)); /* msgbuf length is max SOAP_TMPLEN or just 1024 bytes */
999  return soap_send(soap, soap->msgbuf);
1000 }

References soap::body, soap::error, soap::msgbuf, soap_encode_url(), SOAP_OK, soap_send(), and soap_send_raw().

◆ soap_query_send_val()

SOAP_FMAC1 int SOAP_FMAC2 soap_query_send_val ( struct soap soap,
const char *  s 
)

Definition at line 1009 of file stdsoap2.cpp.

1010 {
1011  if (!s)
1012  return SOAP_OK;
1013  if (soap_send_raw(soap, "=", 1))
1014  return soap->error;
1015  (void)soap_encode_url(s, soap->msgbuf, (int)sizeof(soap->msgbuf)); /* msgbuf length is max SOAP_TMPLEN or just 1024 bytes */
1016  return soap_send(soap, soap->msgbuf);
1017 }

References soap::error, soap::msgbuf, soap_encode_url(), SOAP_OK, soap_send(), and soap_send_raw().

◆ soap_query_val()

SOAP_FMAC1 char* SOAP_FMAC2 soap_query_val ( struct soap soap,
char **  s 
)

Definition at line 1057 of file stdsoap2.cpp.

1058 {
1059  char *t = *s;
1060  (void)soap;
1061  if (t && *t == '=')
1062  {
1063  *s = (char*)soap_query_decode(t, strlen(t), t + 1);
1064  return t;
1065  }
1066  return NULL;
1067 }

References NULL, and soap_query_decode().

◆ soap_rand_uuid()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_rand_uuid ( struct soap soap,
const char *  prefix 
)

Definition at line 19897 of file stdsoap2.cpp.

19898 {
19899  int r1, r2, r3, r4;
19900 #ifdef WITH_OPENSSL
19901  r1 = soap_random;
19902  r2 = soap_random;
19903 #else
19904  size_t i;
19905  static int k = 0xFACEB00C;
19906  int lo = k % 127773;
19907  int hi = k / 127773;
19908 # if defined(HAVE_GETTIMEOFDAY)
19909  struct timeval tv;
19910  gettimeofday(&tv, NULL);
19911  r1 = 10000000 * tv.tv_sec + tv.tv_usec;
19912 # elif defined(UNDER_CE)
19913  r1 = (int)Random();
19914 # elif !defined(WITH_LEAN)
19915  r1 = (int)time(NULL);
19916 # else
19917  r1 = k;
19918 # endif
19919  k = 16807 * lo - 2836 * hi;
19920  if (k <= 0)
19921  k += 0x7FFFFFFF;
19922  r2 = k;
19923  /* k &= 0x8FFFFFFF; */
19924  for (i = 0; i < (sizeof(soap->buf) < 16UL ? sizeof(soap->buf) : 16UL); i++)
19925  r2 += soap->buf[i];
19926 #endif
19927  r3 = soap_random;
19928  r4 = soap_random;
19929  (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), prefix ? strlen(prefix) + 37 : 37), "%s%8.8x-%4.4hx-4%3.3hx-%4.4hx-%4.4hx%8.8x", prefix ? prefix : SOAP_STR_EOS, r1, (short)(r2 >> 16), (short)(((short)r2 >> 4) & 0x0FFF), (short)(((short)(r3 >> 16) & 0x3FFF) | 0x8000), (short)r3, r4);
19930  return soap->tmpbuf;
19931 }
#define soap_random
Definition: stdsoap2.h:3117

References soap::buf, endif(), NULL, soap_random, SOAP_SNPRINTF, SOAP_STR_EOS, and soap::tmpbuf.

◆ soap_ready()

SOAP_FMAC1 int SOAP_FMAC2 soap_ready ( struct soap soap)

Definition at line 6968 of file stdsoap2.cpp.

6969 {
6970 #ifndef WITH_LEAN
6971  int r;
6972  if (!soap_valid_socket(soap->socket))
6973  return SOAP_OK; /* OK when no socket! */
6975  if (r > 0 && (r & SOAP_TCP_SELECT_ERR))
6976  r = -1;
6977  if (r < 0 && soap_socket_errno != SOAP_EINTR)
6978  return soap_set_receiver_error(soap, tcp_error(soap), "select failed in soap_ready()", SOAP_TCP_ERROR);
6979  if (r > 0)
6980  {
6981  char t;
6982 #ifdef WITH_OPENSSL
6983  if ((soap->imode & SOAP_ENC_SSL) && soap->ssl)
6984  {
6985  if (SSL_peek(soap->ssl, &t, 1) > 0)
6986  return SOAP_OK;
6987  }
6988  else
6989 #endif
6990  {
6991  if (recv(soap->socket, &t, 1, MSG_PEEK) > 0)
6992  return SOAP_OK;
6993  }
6994  }
6995  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_ready: other end not ready to send on socket=%d select=%d\n", (int)soap->socket, r));
6996  return SOAP_EOF;
6997 #else
6998  (void)soap;
6999  return SOAP_OK;
7000 #endif
7001 }

References DBGLOG, soap::imode, SOAP_EINTR, SOAP_ENC_SSL, SOAP_EOF, SOAP_OK, soap_set_receiver_error(), soap_socket_errno, SOAP_TCP_ERROR, SOAP_TCP_SELECT_ERR, SOAP_TCP_SELECT_RCV, soap_valid_socket, soap::socket, soap::ssl, tcp_error(), tcp_select(), and TEST().

◆ soap_receiver_fault()

SOAP_FMAC1 int SOAP_FMAC2 soap_receiver_fault ( struct soap soap,
const char *  faultstring,
const char *  faultdetailXML 
)

Definition at line 22646 of file stdsoap2.cpp.

22647 {
22648  return soap_receiver_fault_subcode(soap, NULL, faultstring, faultdetailXML);
22649 }
SOAP_FMAC1 int SOAP_FMAC2 soap_receiver_fault_subcode(struct soap *soap, const char *faultsubcodeQName, const char *faultstring, const char *faultdetailXML)
Definition: stdsoap2.cpp:22656

References NULL, and soap_receiver_fault_subcode().

◆ soap_receiver_fault_subcode()

SOAP_FMAC1 int SOAP_FMAC2 soap_receiver_fault_subcode ( struct soap soap,
const char *  faultsubcodeQName,
const char *  faultstring,
const char *  faultdetailXML 
)

Definition at line 22656 of file stdsoap2.cpp.

22657 {
22658  return soap_copy_fault(soap, soap->version == 2 ? "SOAP-ENV:Receiver" : soap->version == 1 ? "SOAP-ENV:Server" : "is internal", faultsubcodeQName, faultstring, faultdetailXML);
22659 }
static int soap_copy_fault(struct soap *, const char *, const char *, const char *, const char *)
Definition: stdsoap2.cpp:22608

References soap_copy_fault(), and soap::version.

Referenced by soap_receiver_fault().

◆ soap_recv()

SOAP_FMAC1 int SOAP_FMAC2 soap_recv ( struct soap soap)

Definition at line 1595 of file stdsoap2.cpp.

1596 {
1597 #ifndef WITH_LEANER
1598  if ((soap->mode & SOAP_ENC_DIME))
1599  {
1600  if (soap->dime.buflen)
1601  {
1602  char *s;
1603  int i;
1604  unsigned char tmp[12];
1605  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "DIME hdr for chunked SOAP in DIME is in buffer\n"));
1606  soap->buflen = soap->dime.buflen;
1607  soap->dime.buflen = 0;
1608  soap->dime.chunksize = 0;
1609  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Skip padding (%ld bytes)\n", -(long)soap->dime.size&3));
1610  for (i = -(long)soap->dime.size&3; i > 0; i--)
1611  {
1612  soap->bufidx++;
1613  if (soap->bufidx >= soap->buflen)
1614  if (soap_recv_raw(soap))
1615  return EOF;
1616  }
1617  if (!(soap->dime.flags & SOAP_DIME_CF))
1618  return SOAP_OK;
1619  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get DIME hdr for next SOAP in DIME chunk\n"));
1620  s = (char*)tmp;
1621  for (i = 12; i > 0; i--)
1622  {
1623  *s++ = soap->buf[soap->bufidx++];
1624  if (soap->bufidx >= soap->buflen)
1625  if (soap_recv_raw(soap))
1626  return EOF;
1627  }
1628  if ((tmp[0] & 0xF8) != SOAP_DIME_VERSION)
1629  return soap->error = SOAP_DIME_MISMATCH;
1630  soap->dime.flags = (tmp[0] & 0x7) | (tmp[1] & 0xF0);
1631  soap->dime.size = ((size_t)tmp[8] << 24) | ((size_t)tmp[9] << 16) | ((size_t)tmp[10] << 8) | ((size_t)tmp[11]);
1632  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get SOAP in DIME chunk (%u bytes)\n", (unsigned int)soap->dime.size));
1634  if (soap->buflen - soap->bufidx >= soap->dime.size)
1635  {
1636  if ((soap->dime.flags & SOAP_DIME_ME))
1637  {
1638  soap->mode &= ~SOAP_ENC_DIME;
1639  }
1640  else
1641  {
1642  soap->dime.buflen = soap->buflen;
1644  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunked SOAP in DIME (%u bytes buffered)\n", (unsigned int)soap->buflen));
1645  }
1646  }
1647  else
1648  {
1650  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunked SOAP in DIME (%u bytes in chunk left)\n", (unsigned int)soap->dime.chunksize));
1651  }
1652  return SOAP_OK;
1653  }
1654  if (soap->dime.chunksize)
1655  {
1656  if (soap_recv_raw(soap))
1657  return EOF;
1658  if (soap->buflen - soap->bufidx >= soap->dime.chunksize)
1659  {
1660  if ((soap->dime.flags & SOAP_DIME_ME))
1661  {
1662  soap->dime.chunksize = 0;
1663  soap->mode &= ~SOAP_ENC_DIME;
1664  }
1665  else
1666  {
1667  soap->dime.buflen = soap->buflen;
1669  soap->dime.chunksize = 0;
1670  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunked SOAP in DIME (%u bytes buffered)\n", (unsigned int)soap->buflen));
1671  }
1672  }
1673  else
1674  {
1676  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunked SOAP in DIME (%u bytes in chunk left)\n", (unsigned int)soap->dime.chunksize));
1677  }
1678  return SOAP_OK;
1679  }
1680  }
1681  if (soap->ffilterrecv)
1682  {
1683  int err;
1684  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Filter recverror = %d bufidx = %lu buflen = %lu\n", soap->recverror, (unsigned long)soap->bufidx, (unsigned long)soap->buflen));
1685  if (soap->recverror)
1686  {
1687  soap->bufidx = soap->buflen = 0;
1688  }
1689  else
1690  {
1691  soap->bufidx = soap->buflen = 0;
1692  err = soap->ffilterrecv(soap, soap->buf, &soap->buflen, sizeof(soap->buf));
1693  if (err)
1694  {
1695  if (err == SOAP_EOF)
1696  return SOAP_EOF;
1697  return soap->error = err;
1698  }
1699  if (soap->buflen)
1700  {
1701  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Filtered output continued %lu bytes\n", (unsigned long)soap->buflen));
1702  return SOAP_OK;
1703  }
1705  soap->buflen -= soap->bufidx; /* chunked may set bufidx > 0 to skip hex chunk length */
1706  }
1707  while (soap->ffilterrecv)
1708  {
1709  err = soap->ffilterrecv(soap, soap->buf + soap->bufidx, &soap->buflen, sizeof(soap->buf) - soap->bufidx);
1710  if (err)
1711  {
1712  if (err == SOAP_EOF)
1713  return SOAP_EOF;
1714  return soap->error = err;
1715  }
1716  if (soap->buflen)
1717  {
1718  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Filtered output %lu bytes\n", (unsigned long)soap->buflen));
1719  soap->buflen += soap->bufidx;
1720  return SOAP_OK;
1721  }
1722  if (soap->recverror)
1723  {
1724  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Returning postponed error %d\n", soap->recverror));
1725  return soap->recverror;
1726  }
1728  soap->buflen -= soap->bufidx; /* chunked may set bufidx > 0 to skip hex chunk length */
1729  }
1730  }
1731  return soap->recverror = soap_recv_raw(soap);
1732 #else
1733  return soap_recv_raw(soap);
1734 #endif
1735 }

References soap::buf, soap::bufidx, soap_dime::buflen, soap::buflen, soap_dime::chunksize, DBGLOG, soap::dime, soap::error, soap::ffilterrecv, soap_dime::flags, soap::mode, soap::recverror, soap_dime::size, SOAP_DIME_CF, SOAP_DIME_ME, SOAP_DIME_MISMATCH, SOAP_DIME_VERSION, SOAP_ENC_DIME, SOAP_EOF, SOAP_OK, soap_recv_raw(), and TEST().

Referenced by soap_getdime().

◆ soap_recv_empty_response()

SOAP_FMAC1 int SOAP_FMAC2 soap_recv_empty_response ( struct soap soap)

Definition at line 22446 of file stdsoap2.cpp.

22447 {
22448  soap->error = SOAP_OK;
22449  if (!(soap->omode & SOAP_IO_UDP) && !(soap->omode & SOAP_ENC_PLAIN))
22450  {
22451  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Receiving empty response\n"));
22452  if (soap_begin_recv(soap) == SOAP_OK)
22453  {
22455  return soap_closesock(soap);
22456  }
22457  else if (soap->error == 200 || soap->error == 201 || soap->error == 202)
22458  {
22459  soap->error = SOAP_OK;
22460  }
22461  }
22462 #ifndef WITH_LEANER
22463  else if ((soap->fprepareinitrecv && (soap->error = soap->fprepareinitrecv(soap)))
22465  {
22466  return soap->error;
22467  }
22468 #endif
22469  return soap_closesock(soap);
22470 }

References DBGLOG, soap::error, soap::fpreparefinalrecv, soap::fprepareinitrecv, soap::omode, soap_begin_recv(), soap_closesock(), SOAP_ENC_PLAIN, soap_end_recv(), soap_http_skip_body(), SOAP_IO_UDP, SOAP_OK, and TEST().

Referenced by soap_DELETE(), soap_PATCH__QName(), soap_PATCH_byte(), soap_PATCH_int(), soap_PATCH_ns1__executeCommand(), soap_PATCH_ns1__executeCommandResponse(), soap_PATCH_SOAP_ENV__Code(), soap_PATCH_SOAP_ENV__Detail(), soap_PATCH_SOAP_ENV__Fault(), soap_PATCH_SOAP_ENV__Header(), soap_PATCH_SOAP_ENV__Reason(), soap_PATCH_string(), soap_PUT__QName(), soap_PUT_byte(), soap_PUT_int(), soap_PUT_ns1__executeCommand(), soap_PUT_ns1__executeCommandResponse(), soap_PUT_SOAP_ENV__Code(), soap_PUT_SOAP_ENV__Detail(), soap_PUT_SOAP_ENV__Fault(), soap_PUT_SOAP_ENV__Header(), soap_PUT_SOAP_ENV__Reason(), and soap_PUT_string().

◆ soap_recv_fault()

SOAP_FMAC1 int SOAP_FMAC2 soap_recv_fault ( struct soap soap,
int  check 
)

Definition at line 22324 of file stdsoap2.cpp.

22325 {
22326  int status = soap->status;
22327  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Check (%d) if receiving SOAP Fault (status = %d)\n", check, status));
22328  if (!check)
22329  {
22330  /* try getfault when no tag or tag mismatched at level 2, otherwise close and return SOAP_TAG_MISMATCH or HTTP error code */
22331  if (soap->error != SOAP_NO_TAG && (soap->error != SOAP_TAG_MISMATCH || soap->level != 2))
22332  {
22333  if (soap->error == SOAP_TAG_MISMATCH && soap->level == 0)
22334  {
22335  soap->error = SOAP_OK;
22336  if (!soap_element_begin_in(soap, "fault", 0, NULL))
22337  {
22338  char *s = NULL, *d = NULL;
22339  (void)soap_instring(soap, "reason", &s, NULL, 0, 1, 0, -1, NULL);
22340  (void)soap_inliteral(soap, "detail", &d);
22341  if (!soap_element_end_in(soap, "fault") && !soap_end_recv(soap))
22342  {
22343  *soap_faultstring(soap) = s;
22344  if (d && *d)
22345  *soap_faultdetail(soap) = d;
22346  if (status)
22347  soap->error = status;
22348  else
22349  soap->error = SOAP_FAULT;
22351  return soap_closesock(soap);
22352  }
22353  }
22355  }
22356  if (status && (status < 200 || status > 299))
22357  soap->error = status;
22358  return soap_closesock(soap);
22359  }
22360  }
22361  soap->error = SOAP_OK;
22362  if (soap_getfault(soap))
22363  {
22364  /* if check>0 and no SOAP Fault is present and no HTTP error then just return to parse request */
22365  if (check
22366  && (status == 0 || (status >= 200 && status <= 299))
22367  && ((soap->error == SOAP_TAG_MISMATCH && soap->level == 2) || soap->error == SOAP_NO_TAG))
22368  return soap->error = SOAP_OK;
22369  /* if check=0 and empty SOAP Body and encodingStyle is NULL and no HTTP error then just return */
22370  if (!check
22371  && (status == 0 || (status >= 200 && status <= 299))
22372  && !soap->encodingStyle
22373  && (soap->error == SOAP_NO_TAG && soap->level <= 2))
22374  return soap->error = SOAP_OK;
22375  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Error: soap_get_soapfault() failed with error %d at level %u tag '%s'\n", soap->error, soap->level, soap->tag));
22376  *soap_faultcode(soap) = (soap->version == 2 ? "SOAP-ENV:Sender" : "SOAP-ENV:Client");
22377  if (status)
22378  soap->error = status;
22379  else
22380  soap->error = status = SOAP_NO_DATA;
22382  }
22383  else
22384  {
22385  const char *s = *soap_faultcode(soap);
22386  if (!soap_match_tag(soap, s, "SOAP-ENV:Server")
22387  || !soap_match_tag(soap, s, "SOAP-ENV:Receiver"))
22388  {
22389  status = SOAP_SVR_FAULT;
22390  }
22391  else if (!soap_match_tag(soap, s, "SOAP-ENV:Client")
22392  || !soap_match_tag(soap, s, "SOAP-ENV:Sender"))
22393  {
22394  status = SOAP_CLI_FAULT;
22395  }
22396  else if (!soap_match_tag(soap, s, "SOAP-ENV:MustUnderstand"))
22397  {
22398  status = SOAP_MUSTUNDERSTAND;
22399  }
22400  else if (!soap_match_tag(soap, s, "SOAP-ENV:VersionMismatch"))
22401  {
22402  status = SOAP_VERSIONMISMATCH;
22403  }
22404  else
22405  {
22406  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Received SOAP Fault code %s\n", s));
22407  status = SOAP_FAULT;
22408  }
22409  if (!soap_body_end_in(soap))
22411  }
22412  (void)soap_end_recv(soap);
22413  soap->error = status;
22414  return soap_closesock(soap);
22415 }
SOAP_FMAC3 int SOAP_FMAC4 soap_getfault(struct soap *soap)
Definition: soapC.cpp:85
SOAP_FMAC1 char **SOAP_FMAC2 soap_inliteral(struct soap *soap, const char *tag, char **p)
Definition: stdsoap2.cpp:18876
SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_end_in(struct soap *soap)
Definition: stdsoap2.cpp:21046
SOAP_FMAC1 int SOAP_FMAC2 soap_body_end_in(struct soap *soap)
Definition: stdsoap2.cpp:21110

References mpq::d, DBGLOG, soap::encodingStyle, soap::error, soap::level, NULL, soap_body_end_in(), SOAP_CLI_FAULT, soap_closesock(), soap_element_begin_in(), soap_element_end_in(), soap_end_recv(), soap_envelope_end_in(), SOAP_FAULT, soap_faultcode(), soap_faultdetail(), soap_faultstring(), soap_getfault(), soap_inliteral(), soap_instring(), soap_match_tag(), SOAP_MUSTUNDERSTAND, SOAP_NO_DATA, SOAP_NO_TAG, SOAP_OK, soap_set_fault(), SOAP_SVR_FAULT, SOAP_TAG_MISMATCH, SOAP_VERSIONMISMATCH, soap::status, soap::tag, TEST(), and soap::version.

◆ soap_recv_header()

SOAP_FMAC1 int SOAP_FMAC2 soap_recv_header ( struct soap soap)

Definition at line 21125 of file stdsoap2.cpp.

21126 {
21128  soap->error = SOAP_OK;
21129  if (soap->error == SOAP_OK && soap->fheader)
21130  soap->error = soap->fheader(soap);
21131  return soap->error;
21132 }
SOAP_FMAC3 int SOAP_FMAC4 soap_getheader(struct soap *soap)
Definition: soapC.cpp:26

References soap::error, soap::fheader, soap_getheader(), SOAP_OK, and SOAP_TAG_MISMATCH.

Referenced by soap_begin_serve().

◆ soap_recv_mime_attachment()

SOAP_FMAC1 struct soap_multipart* SOAP_FMAC2 soap_recv_mime_attachment ( struct soap soap,
void *  handle 
)

Definition at line 19700 of file stdsoap2.cpp.

19701 {
19702  soap_wchar c = 0;
19703  size_t i, m = 0;
19704  char *s, *t = NULL;
19705  struct soap_multipart *content;
19706  short flag = 0;
19707  if (!(soap->mode & SOAP_ENC_MIME))
19708  goto post_check_exit;
19709  content = soap->mime.last;
19710  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get MIME (%p)\n", (void*)content));
19711  if (!content)
19712  {
19713  if (soap_getmimehdr(soap))
19714  goto post_check_exit;
19715  content = soap->mime.last;
19716  }
19717  else if (content != soap->mime.first)
19718  {
19719  if (soap->fmimewriteopen && ((content->ptr = (char*)soap->fmimewriteopen(soap, (void*)handle, content->id, content->type, content->description, content->encoding)) != NULL || soap->error))
19720  {
19721  if (!content->ptr)
19722  goto post_check_exit;
19723  }
19724  }
19725  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Parsing MIME content id='%s' type='%s'\n", content->id ? content->id : SOAP_STR_EOS, content->type ? content->type : SOAP_STR_EOS));
19726  if (!content->ptr && soap_alloc_block(soap) == NULL)
19727  {
19728  soap->error = SOAP_EOM;
19729  goto post_check_exit;
19730  }
19731  for (;;)
19732  {
19733  if (content->ptr)
19734  {
19735  s = soap->tmpbuf;
19736  }
19737  else
19738  {
19739  s = (char*)soap_push_block(soap, NULL, sizeof(soap->tmpbuf));
19740  if (!s)
19741  {
19742  soap->error = SOAP_EOM;
19743  goto post_check_exit;
19744  }
19745  }
19746  for (i = 0; i < sizeof(soap->tmpbuf); i++)
19747  {
19748  if (m > 0)
19749  {
19750  *s++ = *t++;
19751  m--;
19752  }
19753  else
19754  {
19755  if (!flag)
19756  {
19757  c = soap_getchar(soap);
19758  if ((int)c == EOF)
19759  {
19760  if (content->ptr && soap->fmimewriteclose)
19761  soap->fmimewriteclose(soap, (void*)content->ptr);
19762  soap->error = SOAP_CHK_EOF;
19763  goto post_check_exit;
19764  }
19765  }
19766  if (flag || c == '\r')
19767  {
19768  memset((void*)soap->msgbuf, 0, sizeof(soap->msgbuf));
19769  soap_strcpy(soap->msgbuf, sizeof(soap->msgbuf), "\n--");
19770  if (soap->mime.boundary)
19771  {
19772  if (soap_strncat(soap->msgbuf, sizeof(soap->msgbuf), soap->mime.boundary, sizeof(soap->msgbuf) - 4))
19773  {
19775  goto post_check_exit;
19776  }
19777  }
19778  t = soap->msgbuf;
19779  do
19780  {
19781  c = soap_getchar(soap);
19782  } while (c == *t++);
19783  if ((int)c == EOF)
19784  {
19785  if (content->ptr && soap->fmimewriteclose)
19786  soap->fmimewriteclose(soap, (void*)content->ptr);
19787  soap->error = SOAP_CHK_EOF;
19788  goto post_check_exit;
19789  }
19790  if (!*--t)
19791  goto end;
19792  *t = (char)c;
19793  flag = (c == '\r');
19794  m = t - soap->msgbuf + 1 - flag;
19795  t = soap->msgbuf;
19796  c = '\r';
19797  }
19798  *s++ = (char)c;
19799  }
19800  }
19801  if (content->ptr && soap->fmimewrite)
19802  {
19803  soap->error = soap->fmimewrite(soap, (void*)content->ptr, soap->tmpbuf, i);
19804  if (soap->error)
19805  break;
19806  }
19807  }
19808 end:
19809  if (content->ptr)
19810  {
19811  if (!soap->error && soap->fmimewrite)
19812  soap->error = soap->fmimewrite(soap, (void*)content->ptr, soap->tmpbuf, i);
19813  if (soap->fmimewriteclose)
19814  soap->fmimewriteclose(soap, (void*)content->ptr);
19815  if (soap->error)
19816  goto post_check_exit;
19817  }
19818  else
19819  {
19820  *s = '\0'; /* make 0-terminated, just in case even though this is binary data */
19821  content->size = soap_size_block(soap, NULL, i + 1) - 1; /* last block with '\0' */
19822  content->ptr = soap_save_block(soap, NULL, NULL, 0);
19823  }
19824  soap_resolve_attachment(soap, content);
19825  if (c == '-' && soap_getchar(soap) == '-')
19826  {
19827  soap->mode &= ~SOAP_ENC_MIME;
19828  if ((soap->mode & SOAP_MIME_POSTCHECK))
19829  {
19830  if (soap_end_recv(soap))
19831  goto post_check_exit;
19832  if (soap->keep_alive == -2) /* special case to keep alive */
19833  soap->keep_alive = 0;
19835  }
19836  }
19837  else
19838  {
19839  while (c != '\r' && (int)c != EOF && soap_coblank(c))
19840  c = soap_getchar(soap);
19841  if (c != '\r' || soap_getchar(soap) != '\n')
19842  {
19844  goto post_check_exit;
19845  }
19846  if (soap_getmimehdr(soap))
19847  goto post_check_exit;
19848  }
19849  return content;
19850 post_check_exit:
19851  if ((soap->mode & SOAP_MIME_POSTCHECK))
19852  {
19853  if (soap->keep_alive == -2) /* special case to keep alive */
19854  soap->keep_alive = 0;
19856  }
19857  return NULL;
19858 }
SOAP_FMAC1 int SOAP_FMAC2 soap_strncat(char *t, size_t n, const char *s, size_t m)
Definition: stdsoap2.cpp:13054

References soap_mime::boundary, mpq::c, DBGLOG, soap_multipart::description, soap_multipart::encoding, soap::error, soap_mime::first, soap::fmimewrite, soap::fmimewriteclose, soap::fmimewriteopen, soap_multipart::id, soap::keep_alive, soap_mime::last, memset, soap::mime, soap::mode, soap::msgbuf, NULL, soap_multipart::ptr, soap_multipart::size, soap_alloc_block(), SOAP_CHK_EOF, soap_closesock(), soap_coblank, SOAP_ENC_MIME, soap_end_recv(), SOAP_EOM, soap_getchar(), soap_getmimehdr(), SOAP_MIME_ERROR, SOAP_MIME_POSTCHECK, soap_push_block(), soap_resolve_attachment(), soap_save_block(), soap_size_block(), SOAP_STR_EOS, soap_strcpy, soap_strncat(), TEST(), soap::tmpbuf, and soap_multipart::type.

Referenced by soap_begin_recv(), soap_check_mime_attachments(), and soap_getmime().

◆ soap_recv_raw()

SOAP_FMAC1 int SOAP_FMAC2 soap_recv_raw ( struct soap soap)

Definition at line 1353 of file stdsoap2.cpp.

1354 {
1355  size_t ret;
1356 #if !defined(WITH_LEANER) || defined(WITH_ZLIB)
1357  int r;
1358 #endif
1359 #ifdef WITH_ZLIB
1360  if ((soap->mode & SOAP_ENC_ZLIB) && soap->d_stream)
1361  {
1362  if (soap->d_stream->next_out == Z_NULL)
1363  {
1364  soap->bufidx = soap->buflen = 0;
1365  return EOF;
1366  }
1367  if (soap->d_stream->avail_in || !soap->d_stream->avail_out)
1368  {
1369  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflating\n"));
1370  soap->d_stream->next_out = (Byte*)soap->buf;
1371  soap->d_stream->avail_out = sizeof(soap->buf);
1373  if (r == Z_NEED_DICT && soap->z_dict)
1375  if (r == Z_OK || r == Z_STREAM_END)
1376  {
1377  soap->bufidx = 0;
1378  ret = soap->buflen = sizeof(soap->buf) - soap->d_stream->avail_out;
1380  soap->z_crc = crc32(soap->z_crc, (Byte*)soap->buf, (unsigned int)ret);
1381  if (r == Z_STREAM_END)
1382  {
1383  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflated %lu->%lu bytes\n", soap->d_stream->total_in, soap->d_stream->total_out));
1384  soap->d_stream->next_out = Z_NULL;
1385  }
1386  if (ret)
1387  {
1388  if (soap->count + ret < soap->count)
1389  return soap->error = SOAP_EOF;
1390  soap->count += ret;
1392  return soap->error = SOAP_EOF;
1393  soap->z_ratio_in = (float)soap->d_stream->total_in / (float)soap->d_stream->total_out;
1395  {
1396  soap->d_stream->msg = (char*)"caught SOAP_MINDEFLATERATIO explosive decompression guard (remedy: increase SOAP_MAXINFLATESIZE and/or decrease SOAP_MINDEFLATERATIO)";
1397  return soap->error = SOAP_ZLIB_ERROR;
1398  }
1399  DBGLOG(RECV, SOAP_MESSAGE(fdebug, "\n---- decompressed ----\n"));
1400  DBGMSG(RECV, soap->buf, ret);
1401  DBGLOG(RECV, SOAP_MESSAGE(fdebug, "\n----\n"));
1402 #ifndef WITH_LEANER
1403  if (soap->fpreparerecv && (r = soap->fpreparerecv(soap, soap->buf, ret)) != SOAP_OK)
1404  return soap->error = r;
1405 #endif
1406  return SOAP_OK;
1407  }
1408  }
1409  else if (r != Z_BUF_ERROR)
1410  {
1411  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflate error: %s\n", soap->d_stream->msg ? soap->d_stream->msg : SOAP_STR_EOS));
1412  soap->d_stream->next_out = Z_NULL;
1413  return soap->error = SOAP_ZLIB_ERROR;
1414  }
1415  }
1416 zlib_again:
1417  if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK && !soap->chunksize)
1418  {
1419  (void)soap_memcpy((void*)soap->buf, sizeof(soap->buf), (const void*)soap->z_buf, sizeof(soap->buf));
1420  soap->buflen = soap->z_buflen;
1421  }
1422  DBGLOG(RECV, SOAP_MESSAGE(fdebug, "\n---- compressed ----\n"));
1423  }
1424 #endif
1425 #ifndef WITH_NOHTTP
1426  if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK) /* read HTTP chunked transfer */
1427  {
1428  for (;;)
1429  {
1430  soap_wchar c;
1431  char *t, tmp[17];
1432  if (soap->chunksize)
1433  {
1434  soap->buflen = ret = soap->frecv(soap, soap->buf, soap->chunksize > sizeof(soap->buf) ? sizeof(soap->buf) : soap->chunksize);
1435  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Getting chunk: read %u bytes\n", (unsigned int)ret));
1436  DBGMSG(RECV, soap->buf, ret);
1437  soap->bufidx = 0;
1438  if (!ret)
1439  {
1440  soap->ahead = EOF;
1441  return EOF;
1442  }
1443  soap->chunksize -= ret;
1444  break;
1445  }
1446  if (!soap->chunkbuflen)
1447  {
1448  soap->chunkbuflen = ret = soap->frecv(soap, soap->buf, sizeof(soap->buf));
1449  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Read %u bytes (chunked) from socket=%d\n", (unsigned int)ret, (int)soap->socket));
1450  DBGMSG(RECV, soap->buf, ret);
1451  soap->bufidx = 0;
1452  if (!ret)
1453  {
1454  soap->ahead = EOF;
1455  return EOF;
1456  }
1457  }
1458  else
1459  {
1460  soap->bufidx = soap->buflen;
1461  }
1463  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Getting chunk size (idx=%u len=%u)\n", (unsigned int)soap->bufidx, (unsigned int)soap->buflen));
1464  while (!soap_isxdigit((int)(c = soap_getchunkchar(soap))))
1465  {
1466  if ((int)c == EOF)
1467  {
1468  soap->ahead = EOF;
1469  return EOF;
1470  }
1471  }
1472  t = tmp;
1473  do
1474  {
1475  *t++ = (char)c;
1476  } while (soap_isxdigit((int)(c = soap_getchunkchar(soap))) && (size_t)(t - tmp) < sizeof(tmp)-1);
1477  while ((int)c != EOF && c != '\n')
1479  if ((int)c == EOF)
1480  {
1481  soap->ahead = EOF;
1482  return EOF;
1483  }
1484  *t = '\0';
1485  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunk size = %s (hex)\n", tmp));
1486  soap->chunksize = (size_t)soap_strtoul(tmp, &t, 16);
1487  if (!soap->chunksize)
1488  {
1489  soap->bufidx = soap->buflen = soap->chunkbuflen = 0;
1490  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of chunked message\n"));
1491  ret = 0;
1492  soap->ahead = EOF;
1493  break;
1494  }
1496  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Moving buf len to idx=%u len=%u (%s)\n", (unsigned int)soap->bufidx, (unsigned int)soap->buflen, tmp));
1497  if (soap->buflen > soap->chunkbuflen)
1498  {
1500  soap->chunksize -= soap->buflen - soap->bufidx;
1501  soap->chunkbuflen = 0;
1502  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Passed end of buffer for chunked HTTP (%u bytes left)\n", (unsigned int)(soap->buflen - soap->bufidx)));
1503  }
1504  else if (soap->chunkbuflen)
1505  {
1506  soap->chunksize = 0;
1507  }
1508  ret = soap->buflen - soap->bufidx;
1509  if (ret)
1510  break;
1511  }
1512  }
1513  else
1514 #endif
1515  {
1516  soap->bufidx = 0;
1517  soap->buflen = ret = soap->frecv(soap, soap->buf, sizeof(soap->buf));
1518  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Read %u bytes from socket=%d/fd=%d\n", (unsigned int)ret, (int)soap->socket, soap->recvfd));
1519  DBGMSG(RECV, soap->buf, ret);
1520  }
1521 #ifdef WITH_ZLIB
1522  if ((soap->mode & SOAP_ENC_ZLIB))
1523  {
1524  (void)soap_memcpy((void*)soap->z_buf, sizeof(soap->buf), (const void*)soap->buf, sizeof(soap->buf));
1525  soap->d_stream->next_in = (Byte*)(soap->z_buf + soap->bufidx);
1526  soap->d_stream->avail_in = (unsigned int)ret;
1527  soap->d_stream->next_out = (Byte*)soap->buf;
1528  soap->d_stream->avail_out = sizeof(soap->buf);
1530  if (r == Z_NEED_DICT && soap->z_dict)
1532  if (r == Z_OK || r == Z_STREAM_END)
1533  {
1534  soap->bufidx = 0;
1535  soap->z_buflen = soap->buflen;
1536  soap->buflen = sizeof(soap->buf) - soap->d_stream->avail_out;
1538  soap->z_crc = crc32(soap->z_crc, (Byte*)soap->buf, (unsigned int)soap->buflen);
1539  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflated %u bytes\n", (unsigned int)soap->buflen));
1540  if (ret && !soap->buflen && r != Z_STREAM_END)
1541  goto zlib_again;
1542  ret = soap->buflen;
1543  if (r == Z_STREAM_END)
1544  {
1545  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflated total %lu->%lu bytes\n", soap->d_stream->total_in, soap->d_stream->total_out));
1546  soap->d_stream->next_out = Z_NULL;
1547  }
1548  soap->z_ratio_in = (float)soap->d_stream->total_in / (float)soap->d_stream->total_out;
1550  {
1551  soap->d_stream->msg = (char*)"caught SOAP_MINDEFLATERATIO explosive decompression guard (remedy: increase SOAP_MAXINFLATESIZE and/or decrease SOAP_MINDEFLATERATIO)";
1552  return soap->error = SOAP_ZLIB_ERROR;
1553  }
1554  DBGLOG(RECV, SOAP_MESSAGE(fdebug, "\n---- decompressed ----\n"));
1555  DBGMSG(RECV, soap->buf, ret);
1556 #ifndef WITH_LEANER
1557  if (soap->fpreparerecv && (r = soap->fpreparerecv(soap, soap->buf, ret)) != SOAP_OK)
1558  return soap->error = r;
1559 #endif
1560  }
1561  else
1562  {
1563  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unable to inflate: (%d) %s\n", r, soap->d_stream->msg ? soap->d_stream->msg : SOAP_STR_EOS));
1564  soap->d_stream->next_out = Z_NULL;
1565  return soap->error = SOAP_ZLIB_ERROR;
1566  }
1567  }
1568 #endif
1569 #ifndef WITH_LEANER
1570  if (soap->fpreparerecv
1571 #ifdef WITH_ZLIB
1572  && soap->zlib_in == SOAP_ZLIB_NONE
1573 #endif
1574  && (r = soap->fpreparerecv(soap, soap->buf + soap->bufidx, ret)))
1575  return soap->error = r;
1576 #endif
1577  if (ret)
1578  {
1579  if (soap->count + ret < soap->count)
1580  return EOF;
1581  soap->count += ret;
1583  return EOF;
1584  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Read count=" SOAP_ULONG_FORMAT " (+%lu)\n", soap->count, (unsigned long)ret));
1585  return SOAP_OK;
1586  }
1587  return EOF;
1588 }
int ZEXPORT inflate(z_streamp strm, int flush)
Definition: inflate.c:604
int ret
Definition: prof.c:281
static soap_wchar soap_getchunkchar(struct soap *)
Definition: stdsoap2.cpp:1326
#define SOAP_MAXINFLATESIZE
Definition: stdsoap2.h:1294
#define SOAP_MINDEFLATERATIO
Definition: stdsoap2.h:1308
#define Z_NEED_DICT
Definition: zlib.h:175
#define Z_BUF_ERROR
Definition: zlib.h:180

References soap::ahead, soap::buf, soap::bufidx, soap::buflen, mpq::c, soap::chunkbuflen, soap::chunksize, count(), soap::count, crc32(), soap::d_stream, DBGLOG, DBGMSG, endif(), soap::error, soap::fpreparerecv, soap::frecv, if(), inflate(), inflateSetDictionary(), soap::mode, soap::recv_maxlength, soap::recvfd, ret, SOAP_ENC_ZLIB, SOAP_EOF, soap_getchunkchar(), SOAP_IO, SOAP_IO_CHUNK, soap_isxdigit(), SOAP_MAXINFLATESIZE, soap_memcpy, SOAP_MINDEFLATERATIO, SOAP_OK, SOAP_STR_EOS, soap_strtoul, SOAP_ULONG_FORMAT, SOAP_ZLIB_ERROR, SOAP_ZLIB_GZIP, SOAP_ZLIB_NONE, soap::socket, TEST(), soap::z_buf, Z_BUF_ERROR, soap::z_buflen, soap::z_crc, soap::z_dict, soap::z_dict_len, Z_NEED_DICT, Z_NO_FLUSH, Z_NULL, Z_OK, soap::z_ratio_in, Z_STREAM_END, and soap::zlib_in.

Referenced by soap_end_recv(), and soap_recv().

◆ soap_reference()

SOAP_FMAC1 int SOAP_FMAC2 soap_reference ( struct soap soap,
const void *  p,
int  t 
)

Definition at line 10031 of file stdsoap2.cpp.

10032 {
10033  struct soap_plist *pp;
10035  return 1;
10036  if (soap_pointer_lookup(soap, p, t, &pp))
10037  {
10038  if (pp->mark1 == 0)
10039  {
10040  pp->mark1 = 2;
10041  pp->mark2 = 2;
10042  }
10043  }
10044  else if (!soap_pointer_enter(soap, p, NULL, 0, t, &pp))
10045  {
10046  return 1;
10047  }
10048  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Reference %p type=%d (%d %d)\n", p, t, (int)pp->mark1, (int)pp->mark2));
10049  return pp->mark1;
10050 }

References DBGLOG, soap::encodingStyle, soap_plist::mark1, soap_plist::mark2, NULL, soap::omode, SOAP_ENC_DIME, SOAP_ENC_MIME, SOAP_ENC_MTOM, soap_pointer_enter(), soap_pointer_lookup(), SOAP_XML_GRAPH, SOAP_XML_TREE, and TEST().

Referenced by soap_serialize__QName(), soap_serialize_PointerToSOAP_ENV__Code(), soap_serialize_PointerToSOAP_ENV__Detail(), soap_serialize_PointerToSOAP_ENV__Reason(), soap_serialize_PointerTostring(), and soap_serialize_string().

◆ soap_register_plugin_arg()

SOAP_FMAC1 int SOAP_FMAC2 soap_register_plugin_arg ( struct soap soap,
int(*)(struct soap *, struct soap_plugin *, void *)  fcreate,
void *  arg 
)

Definition at line 22856 of file stdsoap2.cpp.

22857 {
22858  struct soap_plugin *p;
22859  int err;
22860  p = (struct soap_plugin*)SOAP_MALLOC(soap, sizeof(struct soap_plugin));
22861  if (!p)
22862  return soap->error = SOAP_EOM;
22863  p->id = NULL;
22864  p->data = NULL;
22865  p->fcopy = NULL;
22866  p->fdelete = NULL;
22867  err = fcreate(soap, p, arg);
22868  if (!err && p->fdelete && p->id)
22869  {
22870  if (!soap_lookup_plugin(soap, p->id))
22871  {
22872  p->next = soap->plugins;
22873  soap->plugins = p;
22874  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Registered '%s' plugin\n", p->id));
22875  return SOAP_OK;
22876  }
22877  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not register plugin '%s': plugin with the same ID already registered\n", p->id));
22878  SOAP_FREE(soap, p);
22879  return SOAP_OK;
22880  }
22881  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not register plugin '%s': plugin returned error %d or plugin ID not set or fdelete callback not set\n", p->id ? p->id : "plugin ID not set", err));
22882  SOAP_FREE(soap, p);
22883  soap->error = err ? err : SOAP_PLUGIN_ERROR;
22884  return soap->error;
22885 }
auto arg(const Char *name, const T &arg) -> detail::named_arg< Char, T >
Definition: core.h:1725
SOAP_FMAC1 void *SOAP_FMAC2 soap_lookup_plugin(struct soap *soap, const char *id)
Definition: stdsoap2.cpp:22904
#define SOAP_PLUGIN_ERROR
Definition: stdsoap2.h:1568
void * data
Definition: stdsoap2.h:3031

References arg(), soap_plugin::data, DBGLOG, soap::error, soap_plugin::fcopy, soap_plugin::fdelete, soap_plugin::id, soap_plugin::next, NULL, soap::plugins, SOAP_EOM, SOAP_FREE, soap_lookup_plugin(), SOAP_MALLOC, SOAP_OK, SOAP_PLUGIN_ERROR, and TEST().

◆ soap_resolve()

SOAP_FMAC1 int SOAP_FMAC2 soap_resolve ( struct soap soap)

Definition at line 3089 of file stdsoap2.cpp.

3090 {
3091  int i;
3092  short flag;
3093  const char *id;
3094  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolving forwarded refs\n"));
3095  for (i = 0; i < SOAP_IDHASH; i++)
3096  {
3097  struct soap_ilist *ip;
3098  for (ip = soap->iht[i]; ip; ip = ip->next)
3099  {
3100  if (ip->ptr)
3101  {
3102  void **q;
3103  struct soap_flist *fp, **fpp = &ip->flist;
3104  if (ip->spine)
3105  ip->spine[0] = ip->ptr;
3106  q = (void**)ip->link;
3107  ip->link = NULL;
3108  DBGLOG(TEST, if (q) SOAP_MESSAGE(fdebug, "Traversing link chain to resolve id='%s' type=%d\n", ip->id, ip->type));
3109  while (q)
3110  {
3111  void *p = *q;
3112  *q = ip->ptr;
3113  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "... link %p -> %p\n", (void*)q, ip->ptr));
3114  q = (void**)p;
3115  }
3116  while ((fp = *fpp))
3117  {
3118  if (fp->level > 0 && fp->finsert)
3119  {
3120  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "... insert type=%d link %p -> %p\n", fp->type, fp->ptr, ip->ptr));
3121  if (ip->spine && fp->level <= SOAP_MAXPTRS)
3122  fp->finsert(soap, ip->type, fp->type, fp->ptr, fp->index, &ip->spine[fp->level - 1], &ip->smart);
3123  else if (fp->level == 1)
3124  fp->finsert(soap, ip->type, fp->type, fp->ptr, fp->index, &ip->ptr, &ip->smart);
3125  else if (fp->level <= SOAP_MAXPTRS)
3126  {
3127  int i;
3128  ip->spine = (void**)soap_malloc(soap, SOAP_MAXPTRS * sizeof(void*));
3129  if (!ip->spine)
3130  return soap->error = SOAP_EOM;
3131  ip->spine[0] = ip->ptr;
3132  for (i = 1; i < SOAP_MAXPTRS; i++)
3133  ip->spine[i] = &ip->spine[i - 1];
3134  fp->finsert(soap, ip->type, fp->type, fp->ptr, fp->index, &ip->spine[fp->level - 1], &ip->smart);
3135  }
3136  *fpp = fp->next;
3137  SOAP_FREE(soap, fp);
3138  }
3139  else
3140  fpp = &fp->next;
3141  }
3142  }
3143  else if (*ip->id == '#')
3144  {
3145  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Missing id='%s'\n", ip->id));
3146  soap_strcpy(soap->id, sizeof(soap->id), ip->id + 1);
3147  return soap->error = SOAP_MISSING_ID;
3148  }
3149  }
3150  }
3151  do
3152  {
3153  flag = 0;
3154  id = NULL;
3155  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolution phase\n"));
3156  for (i = 0; i < SOAP_IDHASH; i++)
3157  {
3158  struct soap_ilist *ip;
3159  for (ip = soap->iht[i]; ip; ip = ip->next)
3160  {
3161  if (ip->copy || ip->flist)
3162  {
3163  if (ip->ptr && !soap_has_copies(soap, (const char*)ip->ptr, (const char*)ip->ptr + ip->size))
3164  {
3165  struct soap_flist *fp;
3166  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolving id='%s' type=%d ptr=%p size=%lu ...\n", ip->id, ip->type, ip->ptr, (unsigned long)ip->size));
3167  if (ip->copy)
3168  {
3169  void *p, **q = (void**)ip->copy;
3170  DBGLOG(TEST, if (q) SOAP_MESSAGE(fdebug, "Traversing copy chain to resolve id='%s'\n", ip->id));
3171  ip->copy = NULL;
3172  do
3173  {
3174  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "... copy %p -> %p (%u bytes)\n", ip->ptr, (void*)q, (unsigned int)ip->size));
3175  p = *q;
3176  (void)soap_memcpy((void*)q, ip->size, (const void*)ip->ptr, ip->size);
3177  q = (void**)p;
3178  } while (q);
3179  flag = 1;
3180  }
3181  while ((fp = ip->flist))
3182  {
3183  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolving forwarded data type=%d target type=%d location=%p level=%u id='%s'\n", ip->type, fp->type, ip->ptr, fp->level, ip->id));
3184  if (fp->level == 0)
3185  {
3186  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "... copy %p -> %p (%lu bytes)\n", ip->ptr, fp->ptr, (unsigned long)ip->size));
3187  if (fp->finsert)
3188  fp->finsert(soap, ip->type, fp->type, fp->ptr, fp->index, ip->ptr, &ip->smart);
3189  else
3190  (void)soap_memcpy((void*)fp->ptr, ip->size, (const void*)ip->ptr, ip->size);
3191  }
3192  ip->flist = fp->next;
3193  SOAP_FREE(soap, fp);
3194  flag = 1;
3195  }
3196  }
3197  else if (*ip->id == '#')
3198  id = ip->id;
3199  }
3200  }
3201  }
3202  } while (flag);
3203  if (id)
3204  {
3205  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolution error: forwarded data for id='%s' could not be propagated, please report this problem to the gSOAP developers\n", id));
3206  return soap_id_nullify(soap, id);
3207  }
3208  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolution done\n"));
3209  return SOAP_OK;
3210 }
static int soap_has_copies(struct soap *, const char *, const char *)
Definition: stdsoap2.cpp:3061

References soap_ilist::copy, DBGLOG, soap::error, soap_flist::finsert, soap_ilist::flist, soap_ilist::id, soap::id, soap::iht, soap_flist::index, soap_flist::level, soap_ilist::link, soap_flist::next, soap_ilist::next, NULL, soap_flist::ptr, soap_ilist::ptr, soap_ilist::size, soap_ilist::smart, SOAP_EOM, SOAP_FREE, soap_has_copies(), soap_id_nullify(), SOAP_IDHASH, soap_malloc(), SOAP_MAXPTRS, soap_memcpy, SOAP_MISSING_ID, SOAP_OK, soap_strcpy, soap_ilist::spine, TEST(), soap_flist::type, and soap_ilist::type.

Referenced by soap_end_recv().

◆ soap_response()

SOAP_FMAC1 int SOAP_FMAC2 soap_response ( struct soap soap,
int  status 
)

Definition at line 8383 of file stdsoap2.cpp.

8384 {
8385  ULONG64 count;
8386  if (!(soap->omode & (SOAP_ENC_PLAIN | SOAP_IO_STORE /* this tests for chunking too */))
8387  && (status == SOAP_HTML || (status >= SOAP_FILE && status < SOAP_FILE + 600)))
8389  soap->status = status;
8391  if (soap_init_send(soap))
8392  return soap->error;
8393 #ifndef WITH_NOHTTP
8394  if ((soap->mode & SOAP_IO) != SOAP_IO_STORE && !(soap->mode & SOAP_ENC_PLAIN))
8395  {
8396  int k = soap->mode;
8397  soap->mode &= ~(SOAP_IO | SOAP_ENC_ZLIB);
8398  if ((k & SOAP_IO) != SOAP_IO_FLUSH)
8399  soap->mode |= SOAP_IO_BUFFER;
8400  soap->error = soap->fresponse(soap, status, count);
8401  if (soap->error)
8402  return soap->error;
8403 #ifndef WITH_LEANER
8404  if ((k & SOAP_IO) == SOAP_IO_CHUNK)
8405  {
8406  if (soap_flush(soap))
8407  return soap->error;
8408  }
8409 #endif
8410  soap->mode = k;
8411  }
8412 #endif
8413 #ifndef WITH_LEANER
8415  return soap->error;
8416 #endif
8417  return SOAP_OK;
8418 }
static ULONG64 soap_count_attachments(struct soap *)
Definition: stdsoap2.cpp:19098

References count(), endif(), soap::error, soap::fresponse, soap::mode, soap::omode, soap_begin_attachments(), soap_count_attachments(), SOAP_ENC_PLAIN, SOAP_ENC_ZLIB, SOAP_FILE, soap_flush(), SOAP_HTML, soap_init_send(), SOAP_IO, SOAP_IO_BUFFER, SOAP_IO_CHUNK, SOAP_IO_FLUSH, SOAP_IO_STORE, SOAP_OK, soap::status, and ULONG64.

Referenced by soap_send_empty_response(), soap_send_fault(), and soap_serve_ns1__executeCommand().

◆ soap_retry()

SOAP_FMAC1 void SOAP_FMAC2 soap_retry ( struct soap soap)

Definition at line 14975 of file stdsoap2.cpp.

14976 {
14977  soap->error = SOAP_OK;
14978  soap_revert(soap);
14979 }

References soap::error, SOAP_OK, and soap_revert().

Referenced by soap_xop_forward().

◆ soap_revert()

SOAP_FMAC1 void SOAP_FMAC2 soap_revert ( struct soap soap)

◆ soap_s2base64()

SOAP_FMAC1 char* SOAP_FMAC2 soap_s2base64 ( struct soap soap,
const unsigned char *  s,
char *  t,
int  n 
)

Definition at line 21586 of file stdsoap2.cpp.

21587 {
21588  int i;
21589  unsigned long m;
21590  char *p;
21591  if (!t)
21592  t = (char*)soap_malloc(soap, (n + 2) / 3 * 4 + 1);
21593  if (!t)
21594  return NULL;
21595  p = t;
21596  t[0] = '\0';
21597  if (!s)
21598  return p;
21599  for (; n > 2; n -= 3, s += 3)
21600  {
21601  m = s[0];
21602  m = (m << 8) | s[1];
21603  m = (m << 8) | s[2];
21604  for (i = 4; i > 0; m >>= 6)
21605  t[--i] = soap_base64o[m & 0x3F];
21606  t += 4;
21607  }
21608  t[0] = '\0';
21609  if (n > 0) /* 0 < n <= 2 implies that t[0..4] is allocated (base64 scaling formula) */
21610  {
21611  m = 0;
21612  for (i = 0; i < n; i++)
21613  m = (m << 8) | *s++;
21614  for (; i < 3; i++)
21615  m <<= 8;
21616  for (i = 4; i > 0; m >>= 6)
21617  t[--i] = soap_base64o[m & 0x3F];
21618  for (i = 3; i > n; i--)
21619  t[i] = '=';
21620  t[4] = '\0';
21621  }
21622  return p;
21623 }

References NULL, soap_base64o, and soap_malloc().

Referenced by http_post(), and soap_putbase64().

◆ soap_s2byte()

SOAP_FMAC1 int SOAP_FMAC2 soap_s2byte ( struct soap soap,
const char *  s,
char *  p 
)

Definition at line 16412 of file stdsoap2.cpp.

16413 {
16414  if (s)
16415  {
16416  long n;
16417  char *r;
16418  if (!*s)
16419  return soap->error = SOAP_EMPTY;
16420  n = soap_strtol(s, &r, 10);
16421  if (s == r || *r || n < -128 || n > 127)
16422  soap->error = SOAP_TYPE;
16423  *p = (char)n;
16424  }
16425  return soap->error;
16426 }

References soap::error, SOAP_EMPTY, soap_strtol, and SOAP_TYPE.

Referenced by soap_inbyte().

◆ soap_s2char()

SOAP_FMAC1 int SOAP_FMAC2 soap_s2char ( struct soap soap,
const char *  s,
char **  t,
int  flag,
long  minlen,
long  maxlen,
const char *  pattern 
)

Definition at line 17384 of file stdsoap2.cpp.

17385 {
17386  if (s)
17387  {
17388  const char *r = soap_string(soap, s, flag, minlen, maxlen, pattern);
17389  if (r && (*t = soap_strdup(soap, r)) == NULL)
17390  return soap->error = SOAP_EOM;
17391  }
17392  return soap->error;
17393 }
static const char * soap_string(struct soap *soap, const char *s, int flag, long minlen, long maxlen, const char *pattern)
Definition: stdsoap2.cpp:17418

References soap::error, soap_attribute::flag, NULL, SOAP_EOM, soap_strdup(), and soap_string().

◆ soap_s2dateTime()

SOAP_FMAC1 int SOAP_FMAC2 soap_s2dateTime ( struct soap soap,
const char *  s,
time_t *  p 
)

Definition at line 18686 of file stdsoap2.cpp.

18687 {
18688  *p = 0;
18689  if (s)
18690  {
18691  char *t;
18692  unsigned long d;
18693  struct tm T;
18694  if (!*s)
18695  return soap->error = SOAP_EMPTY;
18696  memset((void*)&T, 0, sizeof(T));
18697  d = soap_strtoul(s, &t, 10);
18698  if (*t == '-')
18699  {
18700  /* YYYY-MM-DD */
18701  T.tm_year = (int)d;
18702  T.tm_mon = (int)soap_strtoul(t + 1, &t, 10);
18703  T.tm_mday = (int)soap_strtoul(t + 1, &t, 10);
18704  }
18705  else if (!(soap->mode & SOAP_XML_STRICT))
18706  {
18707  /* YYYYMMDD */
18708  T.tm_year = (int)(d / 10000);
18709  T.tm_mon = (int)(d / 100 % 100);
18710  T.tm_mday = (int)(d % 100);
18711  }
18712  else
18713  {
18714  return soap->error = SOAP_TYPE;
18715  }
18716  if (*t == 'T' || ((*t == 't' || *t == ' ') && !(soap->mode & SOAP_XML_STRICT)))
18717  {
18718  d = soap_strtoul(t + 1, &t, 10);
18719  if (*t == ':')
18720  {
18721  /* Thh:mm:ss */
18722  T.tm_hour = (int)d;
18723  T.tm_min = (int)soap_strtoul(t + 1, &t, 10);
18724  T.tm_sec = (int)soap_strtoul(t + 1, &t, 10);
18725  }
18726  else if (!(soap->mode & SOAP_XML_STRICT))
18727  {
18728  /* Thhmmss */
18729  T.tm_hour = (int)(d / 10000);
18730  T.tm_min = (int)(d / 100 % 100);
18731  T.tm_sec = (int)(d % 100);
18732  }
18733  else
18734  {
18735  return soap->error = SOAP_TYPE;
18736  }
18737  }
18738  if (T.tm_year == 1)
18739  T.tm_year = 70;
18740  else
18741  T.tm_year -= 1900;
18742  T.tm_mon--;
18743  if (*t == '.')
18744  {
18745  for (t++; *t; t++)
18746  if (*t < '0' || *t > '9')
18747  break;
18748  }
18749  if (*t == ' ' && !(soap->mode & SOAP_XML_STRICT))
18750  t++;
18751  if (*t)
18752  {
18753 #ifndef WITH_NOZONE
18754  if (*t == '+' || *t == '-')
18755  {
18756  int h, m;
18757  m = (int)soap_strtol(t, &t, 10);
18758  if (*t == ':')
18759  {
18760  /* +hh:mm */
18761  h = m;
18762  m = (int)soap_strtol(t + 1, &t, 10);
18763  if (h < 0)
18764  m = -m;
18765  }
18766  else if (!(soap->mode & SOAP_XML_STRICT))
18767  {
18768  /* +hhmm */
18769  h = m / 100;
18770  m = m % 100;
18771  }
18772  else
18773  {
18774  /* +hh */
18775  h = m;
18776  m = 0;
18777  }
18778  if (*t)
18779  return soap->error = SOAP_TYPE;
18780  T.tm_min -= m;
18781  T.tm_hour -= h;
18782  /* put hour and min in range */
18783  T.tm_hour += T.tm_min / 60;
18784  T.tm_min %= 60;
18785  if (T.tm_min < 0)
18786  {
18787  T.tm_min += 60;
18788  T.tm_hour--;
18789  }
18790  T.tm_mday += T.tm_hour / 24;
18791  T.tm_hour %= 24;
18792  if (T.tm_hour < 0)
18793  {
18794  T.tm_hour += 24;
18795  T.tm_mday--;
18796  }
18797  /* note: day of the month may be out of range, timegm() handles it */
18798  }
18799  else if (*t != 'Z')
18800  {
18801  return soap->error = SOAP_TYPE;
18802  }
18803 #endif
18804  *p = soap_timegm(&T);
18805  }
18806  else /* no UTC or timezone, so assume we got a localtime */
18807  {
18808  T.tm_isdst = -1;
18809  *p = mktime(&T);
18810  }
18811  }
18812  return soap->error;
18813 }
SOAP_FMAC1 time_t SOAP_FMAC2 soap_timegm(struct tm *T)
Definition: stdsoap2.cpp:18523

References mpq::d, soap::error, memset, soap::mode, SOAP_EMPTY, soap_strtol, soap_strtoul, soap_timegm(), SOAP_TYPE, and SOAP_XML_STRICT.

Referenced by soap_indateTime().

◆ soap_s2double()

SOAP_FMAC1 int SOAP_FMAC2 soap_s2double ( struct soap soap,
const char *  s,
double *  p 
)

Definition at line 16817 of file stdsoap2.cpp.

16818 {
16819  if (s)
16820  {
16821  if (!*s)
16822  return soap->error = SOAP_EMPTY;
16823  if (!soap_tag_cmp(s, "INF"))
16824  {
16825  *p = DBL_PINFTY;
16826  }
16827  else if (!soap_tag_cmp(s, "+INF"))
16828  {
16829  *p = DBL_PINFTY;
16830  }
16831  else if (!soap_tag_cmp(s, "-INF"))
16832  {
16833  *p = DBL_NINFTY;
16834  }
16835  else if (!soap_tag_cmp(s, "NaN"))
16836  {
16837  *p = DBL_NAN;
16838  }
16839  else
16840  {
16841 #if defined(WITH_C_LOCALE)
16842 # if defined(HAVE_STRTOD_L)
16843  char *r;
16844 # ifdef WIN32
16845  *p = _strtod_l(s, &r, SOAP_LOCALE(soap));
16846 # else
16847  *p = strtod_l(s, &r, SOAP_LOCALE(soap));
16848 # endif
16849  if (*r)
16850  soap->error = SOAP_TYPE;
16851 # elif defined(HAVE_STRTOD)
16852  char *r;
16853  SOAP_LOCALE_T locale = uselocale(SOAP_LOCALE(soap));
16854  *p = strtod(s, &r);
16855  uselocale(locale);
16856  if (*r)
16857  soap->error = SOAP_TYPE;
16858 # elif defined(HAVE_SSCANF_L)
16859  SOAP_LOCALE_T locale = uselocale(SOAP_LOCALE(soap));
16860  if (sscanf_l(s, SOAP_LOCALE(soap), "%lf", p) != 1)
16861  soap->error = SOAP_TYPE;
16862  uselocale(locale);
16863 # else
16864  soap->error = SOAP_TYPE;
16865 # endif
16866 #elif defined(HAVE_STRTOD)
16867  char *r;
16868  *p = strtod(s, &r);
16869  if (*r)
16870  soap->error = SOAP_TYPE;
16871 #elif defined(HAVE_SSCANF)
16872  if (sscanf(s, "%lf", p) != 1)
16873  soap->error = SOAP_TYPE;
16874 #else
16875  soap->error = SOAP_TYPE;
16876 #endif
16877  }
16878  }
16879  return soap->error;
16880 }
#define DBL_NAN
Definition: stdsoap2.h:1412
#define DBL_NINFTY
Definition: stdsoap2.h:1432
#define DBL_PINFTY
Definition: stdsoap2.h:1427

References DBL_NAN, DBL_NINFTY, DBL_PINFTY, soap::error, SOAP_EMPTY, soap_tag_cmp(), and SOAP_TYPE.

Referenced by soap_indouble().

◆ soap_s2float()

SOAP_FMAC1 int SOAP_FMAC2 soap_s2float ( struct soap soap,
const char *  s,
float *  p 
)

Definition at line 16606 of file stdsoap2.cpp.

16607 {
16608  if (s)
16609  {
16610  if (!*s)
16611  return soap->error = SOAP_EMPTY;
16612  if (!soap_tag_cmp(s, "INF"))
16613  {
16614  *p = FLT_PINFTY;
16615  }
16616  else if (!soap_tag_cmp(s, "+INF"))
16617  {
16618  *p = FLT_PINFTY;
16619  }
16620  else if (!soap_tag_cmp(s, "-INF"))
16621  {
16622  *p = FLT_NINFTY;
16623  }
16624  else if (!soap_tag_cmp(s, "NaN"))
16625  {
16626  *p = FLT_NAN;
16627  }
16628  else
16629  {
16630 /* On some systems strtof requires -std=c99 or does not even link: so we try strtod first */
16631 #if defined(WITH_C_LOCALE)
16632 # if defined(HAVE_STRTOD_L)
16633  char *r;
16634 # ifdef WIN32
16635  *p = (float)_strtod_l(s, &r, SOAP_LOCALE(soap));
16636 # else
16637  *p = (float)strtod_l(s, &r, SOAP_LOCALE(soap));
16638 # endif
16639  if (*r)
16640  soap->error = SOAP_TYPE;
16641 # elif defined(HAVE_STRTOF_L)
16642  char *r;
16643  *p = strtof_l((char*)s, &r, SOAP_LOCALE(soap));
16644  if (*r)
16645  soap->error = SOAP_TYPE;
16646 # elif defined(HAVE_SSCANF_L)
16647  double n;
16648  if (sscanf_l(s, SOAP_LOCALE(soap), "%lf", &n) != 1)
16649  soap->error = SOAP_TYPE;
16650  *p = (float)n;
16651 # elif defined(HAVE_STRTOD)
16652  char *r;
16653  SOAP_LOCALE_T locale = uselocale(SOAP_LOCALE(soap));
16654  *p = (float)strtod((char*)s, &r);
16655  uselocale(locale);
16656  if (*r)
16657  soap->error = SOAP_TYPE;
16658 # elif defined(HAVE_STRTOF)
16659  char *r;
16660  SOAP_LOCALE_T locale = uselocale(SOAP_LOCALE(soap));
16661  *p = strtof((char*)s, &r);
16662  uselocale(locale);
16663  if (*r)
16664  soap->error = SOAP_TYPE;
16665 # elif defined(HAVE_SSCANF)
16666  double n;
16667  SOAP_LOCALE_T locale = uselocale(SOAP_LOCALE(soap));
16668  if (sscanf(s, "%lf", &n) != 1)
16669  soap->error = SOAP_TYPE;
16670  uselocale(locale);
16671  *p = (float)n;
16672 # else
16673  soap->error = SOAP_TYPE;
16674 # endif
16675 #elif defined(HAVE_STRTOD)
16676  char *r;
16677  *p = (float)strtod(s, &r);
16678  if (*r)
16679  soap->error = SOAP_TYPE;
16680 #elif defined(HAVE_STRTOF)
16681  char *r;
16682  *p = strtof((char*)s, &r);
16683  if (*r)
16684  soap->error = SOAP_TYPE;
16685 #elif defined(HAVE_SSCANF)
16686  double n;
16687  if (sscanf(s, "%lf", &n) != 1)
16688  soap->error = SOAP_TYPE;
16689  *p = (float)n;
16690 #else
16691  soap->error = SOAP_TYPE;
16692 #endif
16693  }
16694  }
16695  return soap->error;
16696 }
#define FLT_NINFTY
Definition: stdsoap2.h:1408
#define FLT_NAN
Definition: stdsoap2.h:1388
#define FLT_PINFTY
Definition: stdsoap2.h:1403

References soap::error, FLT_NAN, FLT_NINFTY, FLT_PINFTY, SOAP_EMPTY, soap_tag_cmp(), and SOAP_TYPE.

Referenced by soap_infloat().

◆ soap_s2hex()

SOAP_FMAC1 char* SOAP_FMAC2 soap_s2hex ( struct soap soap,
const unsigned char *  s,
char *  t,
int  n 
)

Definition at line 21722 of file stdsoap2.cpp.

21723 {
21724  char *p;
21725  if (!t)
21726  t = (char*)soap_malloc(soap, 2 * n + 1);
21727  if (!t)
21728  return NULL;
21729  p = t;
21730  t[0] = '\0';
21731  if (s)
21732  {
21733  for (; n > 0; n--)
21734  {
21735  int m = *s++;
21736  *t++ = (char)((m >> 4) + (m > 159 ? 'a' - 10 : '0'));
21737  m &= 0x0F;
21738  *t++ = (char)(m + (m > 9 ? 'a' - 10 : '0'));
21739  }
21740  }
21741  *t++ = '\0';
21742  return p;
21743 }

References NULL, and soap_malloc().

Referenced by soap_puthex().

◆ soap_s2int()

SOAP_FMAC1 int SOAP_FMAC2 soap_s2int ( struct soap soap,
const char *  s,
int *  p 
)

Definition at line 16117 of file stdsoap2.cpp.

16118 {
16119  if (s)
16120  {
16121  long n;
16122  char *r;
16123  if (!*s)
16124  return soap->error = SOAP_EMPTY;
16125 #ifndef WITH_NOIO
16126 #ifndef WITH_LEAN
16128 #endif
16129 #endif
16130  n = soap_strtol(s, &r, 10);
16131  if (s == r || *r
16132 #ifndef WITH_LEAN
16133  || n != (int)n
16134 #endif
16135 #ifndef WITH_NOIO
16136 #ifndef WITH_LEAN
16137  || soap_errno == SOAP_ERANGE
16138 #endif
16139 #endif
16140  )
16141  soap->error = SOAP_TYPE;
16142  *p = (int)n;
16143  }
16144  return soap->error;
16145 }
#define soap_errno
Definition: stdsoap2.h:1158
#define SOAP_ERANGE
Definition: stdsoap2.h:1131

References endif(), soap::error, SOAP_EMPTY, SOAP_ERANGE, soap_errno, soap_reset_errno, soap_strtol, and SOAP_TYPE.

Referenced by soap_inint().

◆ soap_s2long()

SOAP_FMAC1 int SOAP_FMAC2 soap_s2long ( struct soap soap,
const char *  s,
long *  p 
)

Definition at line 16217 of file stdsoap2.cpp.

16218 {
16219  if (s)
16220  {
16221  char *r;
16222  if (!*s)
16223  return soap->error = SOAP_EMPTY;
16224 #ifndef WITH_NOIO
16225 #ifndef WITH_LEAN
16227 #endif
16228 #endif
16229  *p = soap_strtol(s, &r, 10);
16230  if (s == r || *r
16231 #ifndef WITH_NOIO
16232 #ifndef WITH_LEAN
16233  || soap_errno == SOAP_ERANGE
16234 #endif
16235 #endif
16236  )
16237  soap->error = SOAP_TYPE;
16238  }
16239  return soap->error;
16240 }

References endif(), soap::error, SOAP_EMPTY, SOAP_ERANGE, soap_errno, soap_reset_errno, soap_strtol, and SOAP_TYPE.

Referenced by soap_inlong().

◆ soap_s2LONG64()

SOAP_FMAC1 int SOAP_FMAC2 soap_s2LONG64 ( struct soap soap,
const char *  s,
LONG64 p 
)

Definition at line 16312 of file stdsoap2.cpp.

16313 {
16314  if (s)
16315  {
16316  char *r;
16317  if (!*s)
16318  return soap->error = SOAP_EMPTY;
16319 #ifndef WITH_NOIO
16320 #ifndef WITH_LEAN
16322 #endif
16323 #endif
16324  *p = soap_strtoll(s, &r, 10);
16325  if (s == r || *r
16326 #ifndef WITH_NOIO
16327 #ifndef WITH_LEAN
16328  || soap_errno == SOAP_ERANGE
16329 #endif
16330 #endif
16331  )
16332  soap->error = SOAP_TYPE;
16333  }
16334  return soap->error;
16335 }
#define soap_strtoll
Definition: stdsoap2.h:3096

References endif(), soap::error, SOAP_EMPTY, SOAP_ERANGE, soap_errno, soap_reset_errno, soap_strtoll, and SOAP_TYPE.

Referenced by soap_inLONG64().

◆ soap_s2QName()

SOAP_FMAC1 int SOAP_FMAC2 soap_s2QName ( struct soap soap,
const char *  s,
char **  t,
long  minlen,
long  maxlen,
const char *  pattern 
)

Definition at line 17521 of file stdsoap2.cpp.

17522 {
17523  *t = NULL;
17524  if (s)
17525  {
17526  const char *r = soap_QName(soap, s, minlen, maxlen, pattern);
17527  if (r && (*t = soap_strdup(soap, r)) == NULL)
17528  return soap->error = SOAP_EOM;
17529  }
17530  return soap->error;
17531 }
static const char * soap_QName(struct soap *soap, const char *s, long minlen, long maxlen, const char *pattern)
Definition: stdsoap2.cpp:17557

References soap::error, NULL, SOAP_EOM, soap_QName(), and soap_strdup().

Referenced by soap_string_in().

◆ soap_s2short()

SOAP_FMAC1 int SOAP_FMAC2 soap_s2short ( struct soap soap,
const char *  s,
short *  p 
)

Definition at line 16495 of file stdsoap2.cpp.

16496 {
16497  if (s)
16498  {
16499  long n;
16500  char *r;
16501  if (!*s)
16502  return soap->error = SOAP_EMPTY;
16503  n = soap_strtol(s, &r, 10);
16504  if (s == r || *r || n < -32768 || n > 32767)
16505  soap->error = SOAP_TYPE;
16506  *p = (short)n;
16507  }
16508  return soap->error;
16509 }

References soap::error, SOAP_EMPTY, soap_strtol, and SOAP_TYPE.

Referenced by soap_inshort().

◆ soap_s2ULONG64()

SOAP_FMAC1 int SOAP_FMAC2 soap_s2ULONG64 ( struct soap soap,
const char *  s,
ULONG64 p 
)

Definition at line 17308 of file stdsoap2.cpp.

17309 {
17310  if (s)
17311  {
17312  char *r;
17313  if (!*s)
17314  return soap->error = SOAP_EMPTY;
17315 #ifndef WITH_NOIO
17316 #ifndef WITH_LEAN
17318 #endif
17319 #endif
17320  *p = soap_strtoull(s, &r, 10);
17321  if (s == r || *r
17322 #ifndef WITH_NOIO
17323 #ifndef WITH_LEAN
17324  || soap_errno == SOAP_ERANGE
17325 #endif
17326 #endif
17327  )
17328  soap->error = SOAP_TYPE;
17329  if (*p > 0 && strchr(s, '-'))
17330  return soap->error = SOAP_TYPE;
17331  }
17332  return soap->error;
17333 }
#define soap_strtoull
Definition: stdsoap2.h:3104

References endif(), soap::error, SOAP_EMPTY, SOAP_ERANGE, soap_errno, soap_reset_errno, soap_strtoull, and SOAP_TYPE.

Referenced by soap_inULONG64().

◆ soap_s2unsignedByte()

SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedByte ( struct soap soap,
const char *  s,
unsigned char *  p 
)

Definition at line 16943 of file stdsoap2.cpp.

16944 {
16945  if (s)
16946  {
16947  long n;
16948  char *r;
16949  if (!*s)
16950  return soap->error = SOAP_EMPTY;
16951  n = soap_strtol(s, &r, 10);
16952  if (s == r || *r || n < 0 || n > 255)
16953  soap->error = SOAP_TYPE;
16954  *p = (unsigned char)n;
16955  }
16956  return soap->error;
16957 }

References soap::error, SOAP_EMPTY, soap_strtol, and SOAP_TYPE.

Referenced by soap_inunsignedByte().

◆ soap_s2unsignedInt()

SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedInt ( struct soap soap,
const char *  s,
unsigned int *  p 
)

Definition at line 17110 of file stdsoap2.cpp.

17111 {
17112  if (s)
17113  {
17114  char *r;
17115  if (!*s)
17116  return soap->error = SOAP_EMPTY;
17117 #ifndef WITH_NOIO
17118 #ifndef WITH_LEAN
17120 #endif
17121 #endif
17122  *p = (unsigned int)soap_strtoul(s, &r, 10);
17123  if (s == r || *r
17124 #ifndef WITH_NOIO
17125 #ifndef WITH_LEAN
17126  || soap_errno == SOAP_ERANGE
17127 #endif
17128 #endif
17129  )
17130  soap->error = SOAP_TYPE;
17131 #ifdef HAVE_STRTOUL
17132  if (*p > 0 && strchr(s, '-'))
17133  return soap->error = SOAP_TYPE;
17134 #endif
17135  }
17136  return soap->error;
17137 }

References endif(), soap::error, SOAP_EMPTY, SOAP_ERANGE, soap_errno, soap_reset_errno, soap_strtoul, and SOAP_TYPE.

Referenced by soap_inunsignedInt().

◆ soap_s2unsignedLong()

SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedLong ( struct soap soap,
const char *  s,
unsigned long *  p 
)

Definition at line 17209 of file stdsoap2.cpp.

17210 {
17211  if (s)
17212  {
17213  char *r;
17214  if (!*s)
17215  return soap->error = SOAP_EMPTY;
17216 #ifndef WITH_NOIO
17217 #ifndef WITH_LEAN
17219 #endif
17220 #endif
17221  *p = soap_strtoul(s, &r, 10);
17222  if (s == r || *r
17223 #ifndef WITH_NOIO
17224 #ifndef WITH_LEAN
17225  || soap_errno == SOAP_ERANGE
17226 #endif
17227 #endif
17228  )
17229  soap->error = SOAP_TYPE;
17230 #ifdef HAVE_STRTOUL
17231  if (*p > 0 && strchr(s, '-'))
17232  return soap->error = SOAP_TYPE;
17233 #endif
17234  }
17235  return soap->error;
17236 }

References endif(), soap::error, SOAP_EMPTY, SOAP_ERANGE, soap_errno, soap_reset_errno, soap_strtoul, and SOAP_TYPE.

Referenced by soap_inunsignedLong().

◆ soap_s2unsignedShort()

SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedShort ( struct soap soap,
const char *  s,
unsigned short *  p 
)

Definition at line 17026 of file stdsoap2.cpp.

17027 {
17028  if (s)
17029  {
17030  long n;
17031  char *r;
17032  if (!*s)
17033  return soap->error = SOAP_EMPTY;
17034  n = soap_strtol(s, &r, 10);
17035  if (s == r || *r || n < 0 || n > 65535)
17036  soap->error = SOAP_TYPE;
17037  *p = (unsigned short)n;
17038  }
17039  return soap->error;
17040 }

References soap::error, SOAP_EMPTY, soap_strtol, and SOAP_TYPE.

Referenced by soap_inunsignedShort().

◆ soap_s2wchar()

SOAP_FMAC1 int SOAP_FMAC2 soap_s2wchar ( struct soap soap,
const char *  s,
wchar_t **  t,
int  flag,
long  minlen,
long  maxlen,
const char *  pattern 
)

Definition at line 17893 of file stdsoap2.cpp.

17894 {
17895  if (s)
17896  {
17897  const wchar_t *r = soap_wstring(soap, s, flag, minlen, maxlen, pattern);
17898  if (r && (*t = soap_wstrdup(soap, r)) == NULL)
17899  return soap->error = SOAP_EOM;
17900  }
17901  return soap->error;
17902 }
static const wchar_t * soap_wstring(struct soap *soap, const char *s, int flag, long minlen, long maxlen, const char *pattern)
Definition: stdsoap2.cpp:17931

References soap::error, NULL, SOAP_EOM, soap_wstrdup(), and soap_wstring().

◆ soap_save_block()

SOAP_FMAC1 char* SOAP_FMAC2 soap_save_block ( struct soap soap,
struct soap_blist b,
char *  p,
int  flag 
)

Definition at line 3342 of file stdsoap2.cpp.

3343 {
3344  size_t n;
3345  char *q, *s;
3346  if (!b)
3347  b = soap->blist;
3348  if (b->size)
3349  {
3350  if (!p)
3351  p = (char*)soap_malloc(soap, b->size);
3352  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Save all %lu blocks in contiguous memory space of %u bytes (%p->%p)\n", (unsigned long)b->item, (unsigned int)b->size, (void*)b->head, (void*)p));
3353  if (p)
3354  {
3355  s = p;
3356  for (q = soap_first_block(soap, b); q; q = soap_next_block(soap, b))
3357  {
3358  n = soap_block_size(soap, b);
3359  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy %u bytes from %p to %p\n", (unsigned int)n, (void*)q, (void*)s));
3360  if (flag)
3361  soap_update_pointers(soap, s, q, n);
3362  (void)soap_memcpy((void*)s, n, (const void*)q, n);
3363  s += n;
3364  }
3365  }
3366  else
3367  soap->error = SOAP_EOM;
3368  }
3369  soap_end_block(soap, b);
3370  return p;
3371 }
SOAP_FMAC1 void SOAP_FMAC2 soap_update_pointers(struct soap *soap, const char *dst, const char *src, size_t len)
Definition: stdsoap2.cpp:2978

References b, soap::blist, DBGLOG, soap::error, soap_block_size(), soap_end_block(), SOAP_EOM, soap_first_block(), soap_malloc(), soap_memcpy, soap_next_block(), soap_update_pointers(), and TEST().

Referenced by soap_end_send_flush(), soap_getdime(), soap_gethex(), soap_http_get_body_prefix(), soap_peek_element(), soap_QName(), soap_QName2s(), soap_recv_mime_attachment(), soap_string_in(), and soap_wstring_in().

◆ soap_send()

SOAP_FMAC1 int SOAP_FMAC2 soap_send ( struct soap soap,
const char *  s 
)

◆ soap_send2()

SOAP_FMAC1 int SOAP_FMAC2 soap_send2 ( struct soap soap,
const char *  s1,
const char *  s2 
)

Definition at line 962 of file stdsoap2.cpp.

963 {
964  if (soap_send(soap, s1))
965  return soap->error;
966  return soap_send(soap, s2);
967 }

References soap::error, and soap_send().

◆ soap_send3()

SOAP_FMAC1 int SOAP_FMAC2 soap_send3 ( struct soap soap,
const char *  s1,
const char *  s2,
const char *  s3 
)

Definition at line 976 of file stdsoap2.cpp.

977 {
978  if (soap_send(soap, s1)
979  || soap_send(soap, s2))
980  return soap->error;
981  return soap_send(soap, s3);
982 }

References soap::error, and soap_send().

Referenced by soap_putmime(), and soap_putmimehdr().

◆ soap_send_empty_response()

SOAP_FMAC1 int SOAP_FMAC2 soap_send_empty_response ( struct soap soap,
int  status 
)

Definition at line 22423 of file stdsoap2.cpp.

22424 {
22425  soap_mode m = soap->omode;
22426  if (!(m & SOAP_IO_UDP))
22427  {
22428  soap->count = 0;
22429  if ((m & SOAP_IO) == SOAP_IO_CHUNK)
22430  soap->omode = (m & ~SOAP_IO) | SOAP_IO_BUFFER;
22431  (void)soap_response(soap, httpstatuscode);
22432  (void)soap_end_send(soap); /* force end of sends */
22433  soap->error = SOAP_STOP; /* stops the server from returning another response */
22434  soap->omode = m;
22435  }
22436  return soap_closesock(soap);
22437 }
SOAP_FMAC1 int SOAP_FMAC2 soap_end_send(struct soap *soap)
Definition: stdsoap2.cpp:11209
SOAP_FMAC1 int SOAP_FMAC2 soap_response(struct soap *soap, int status)
Definition: stdsoap2.cpp:8383

References soap::count, soap::error, soap::omode, soap_closesock(), soap_end_send(), SOAP_IO, SOAP_IO_BUFFER, SOAP_IO_CHUNK, SOAP_IO_UDP, soap_response(), and SOAP_STOP.

Referenced by http_200(), and soap_send_fault().

◆ soap_send_fault()

SOAP_FMAC1 int SOAP_FMAC2 soap_send_fault ( struct soap soap)

Definition at line 22226 of file stdsoap2.cpp.

22227 {
22228  int status = soap->error;
22229  if (status == SOAP_OK || status == SOAP_STOP)
22230  return soap_closesock(soap);
22231 #ifndef WITH_NOHTTP
22232  if (status >= 200 && status <= 299)
22233  return soap_send_empty_response(soap, status);
22234 #endif
22235  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Sending back fault struct for error code %d\n", soap->error));
22236  soap->keep_alive = 0; /* error: close connection later by disabling keep-alive here */
22238  if (soap->error < 200 && soap->error != SOAP_FAULT)
22239  soap->header = NULL;
22240  if (status != SOAP_EOF || (!soap->recv_timeout && !soap->send_timeout))
22241  {
22242  int r = 1;
22243 #ifndef WITH_NOIO
22244  if (soap->fpoll && soap->fpoll(soap))
22245  {
22246  r = 0;
22247  }
22248 #ifndef WITH_LEAN
22249  else if (soap_valid_socket(soap->socket))
22250  {
22252  if (r > 0)
22253  {
22254  int t;
22255  if (!(r & SOAP_TCP_SELECT_SND)
22256  || ((r & SOAP_TCP_SELECT_RCV)
22257  && recv(soap->socket, (char*)&t, 1, MSG_PEEK) < 0))
22258  r = 0;
22259  }
22260  }
22261 #endif
22262 #endif
22263  if (r > 0)
22264  {
22265  soap->error = SOAP_OK;
22266  if (soap->version > 0)
22267  {
22268  soap->encodingStyle = NULL; /* no encodingStyle in Faults */
22271  (void)soap_begin_count(soap);
22272  if ((soap->mode & SOAP_IO_LENGTH))
22273  {
22275  || soap_putheader(soap)
22277  || soap_putfault(soap)
22280  return soap_closesock(soap);
22281  }
22282  (void)soap_end_count(soap);
22283  if (soap_response(soap, status)
22285  || soap_putheader(soap)
22287  || soap_putfault(soap)
22290  || soap_end_send(soap))
22291  return soap_closesock(soap);
22292  }
22293  else
22294  {
22295  const char *s = *soap_faultstring(soap);
22296  const char **d = soap_faultdetail(soap);
22297  (void)soap_begin_count(soap);
22298  if ((soap->mode & SOAP_IO_LENGTH))
22299  if (soap_element_begin_out(soap, "fault", 0, NULL)
22300  || soap_outstring(soap, "reason", 0, (char*const*)&s, NULL, 0)
22301  || (d && *d && soap_outliteral(soap, "detail", (char*const*)d, NULL))
22302  || soap_element_end_out(soap, "fault"))
22303  return soap_closesock(soap);
22304  (void)soap_end_count(soap);
22305  if (soap_response(soap, status)
22306  || soap_element_begin_out(soap, "fault", 0, NULL)
22307  || soap_outstring(soap, "reason", 0, (char*const*)&s, NULL, 0)
22308  || (d && *d && soap_outliteral(soap, "detail", (char*const*)d, NULL))
22309  || soap_element_end_out(soap, "fault")
22310  || soap_end_send(soap))
22311  return soap_closesock(soap);
22312  }
22313  }
22314  }
22315  soap->error = status;
22316  return soap_closesock(soap);
22317 }
SOAP_FMAC3 void SOAP_FMAC4 soap_serializefault(struct soap *soap)
Definition: soapC.cpp:72
SOAP_FMAC3 void SOAP_FMAC4 soap_serializeheader(struct soap *soap)
Definition: soapC.cpp:45
SOAP_FMAC3 int SOAP_FMAC4 soap_putfault(struct soap *soap)
Definition: soapC.cpp:78
SOAP_FMAC3 int SOAP_FMAC4 soap_putheader(struct soap *soap)
Definition: soapC.cpp:34
SOAP_FMAC1 int SOAP_FMAC2 soap_outstring(struct soap *soap, const char *tag, int id, char *const *p, const char *type, int n)
Definition: stdsoap2.cpp:18281
SOAP_FMAC1 int SOAP_FMAC2 soap_end_count(struct soap *soap)
Definition: stdsoap2.cpp:9824
SOAP_FMAC1 int SOAP_FMAC2 soap_outliteral(struct soap *soap, const char *tag, char *const *p, const char *type)
Definition: stdsoap2.cpp:18858
SOAP_FMAC1 int SOAP_FMAC2 soap_send_empty_response(struct soap *soap, int httpstatuscode)
Definition: stdsoap2.cpp:22423
SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_end_out(struct soap *soap)
Definition: stdsoap2.cpp:20831
SOAP_FMAC1 int SOAP_FMAC2 soap_begin_count(struct soap *soap)
Definition: stdsoap2.cpp:9744
SOAP_FMAC1 int SOAP_FMAC2 soap_body_end_out(struct soap *soap)
Definition: stdsoap2.cpp:21078
SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_begin_out(struct soap *soap)
Definition: stdsoap2.cpp:20818
SOAP_FMAC1 int SOAP_FMAC2 soap_body_begin_out(struct soap *soap)
Definition: stdsoap2.cpp:21059

References mpq::d, DBGLOG, soap::encodingStyle, soap::error, soap::fpoll, soap::header, soap::keep_alive, soap::mode, NULL, soap::recv_timeout, soap::send_timeout, soap_begin_count(), soap_body_begin_out(), soap_body_end_out(), soap_closesock(), soap_element_begin_out(), soap_element_end_out(), soap_end_count(), soap_end_send(), soap_envelope_begin_out(), soap_envelope_end_out(), SOAP_EOF, SOAP_FAULT, soap_faultdetail(), soap_faultstring(), SOAP_IO_LENGTH, SOAP_OK, soap_outliteral(), soap_outstring(), soap_putfault(), soap_putheader(), soap_response(), soap_send_empty_response(), soap_serializefault(), soap_serializeheader(), soap_set_fault(), SOAP_STOP, SOAP_TCP_SELECT_RCV, SOAP_TCP_SELECT_SND, soap_valid_socket, soap::socket, tcp_select(), TEST(), and soap::version.

Referenced by soap_begin_serve(), and soap_serve().

◆ soap_send_raw()

SOAP_FMAC1 int SOAP_FMAC2 soap_send_raw ( struct soap soap,
const char *  s,
size_t  n 
)

Definition at line 825 of file stdsoap2.cpp.

826 {
827  if (!s || !n)
828  return SOAP_OK;
829 #ifndef WITH_LEANER
831  return soap->error;
832  if (soap->ffiltersend && (soap->error = soap->ffiltersend(soap, &s, &n)) != SOAP_OK)
833  return soap->error;
834 #endif
835  if ((soap->mode & SOAP_IO_LENGTH))
836  {
837  soap->count += n;
838  }
839  else if ((soap->mode & SOAP_IO))
840  {
841  size_t i = sizeof(soap->buf) - soap->bufidx;
842  while (n >= i)
843  {
844  (void)soap_memcpy((void*)(soap->buf + soap->bufidx), i, (const void*)s, i);
845  soap->bufidx = sizeof(soap->buf);
846  if (soap_flush(soap))
847  return soap->error;
848  s += i;
849  n -= i;
850  i = sizeof(soap->buf);
851  }
852  (void)soap_memcpy((void*)(soap->buf + soap->bufidx), sizeof(soap->buf) - soap->bufidx, (const void*)s, n);
853  soap->bufidx += n;
854  }
855  else
856  {
857  return soap_flush_raw(soap, s, n);
858  }
859  return SOAP_OK;
860 }

References soap::buf, soap::bufidx, soap::count, soap::error, soap::ffiltersend, soap::fpreparesend, soap::mode, soap_flush(), soap_flush_raw(), SOAP_IO, SOAP_IO_LENGTH, SOAP_IO_STORE, soap_memcpy, and SOAP_OK.

Referenced by http_post_header(), http_send_header(), soap_attribute(), soap_element(), soap_element_end(), soap_element_start_end_out(), soap_end_attachments(), soap_envelope_end_out(), soap_putbase64(), soap_putdime(), soap_putdimefield(), soap_putdimehdr(), soap_puthex(), soap_puthttphdr(), soap_putmime(), soap_putmimehdr(), soap_pututf8(), soap_query_send_key(), soap_query_send_val(), soap_send(), soap_string_out(), and soap_wstring_out().

◆ soap_sender_fault()

SOAP_FMAC1 int SOAP_FMAC2 soap_sender_fault ( struct soap soap,
const char *  faultstring,
const char *  faultdetailXML 
)

Definition at line 22626 of file stdsoap2.cpp.

22627 {
22628  return soap_sender_fault_subcode(soap, NULL, faultstring, faultdetailXML);
22629 }
SOAP_FMAC1 int SOAP_FMAC2 soap_sender_fault_subcode(struct soap *soap, const char *faultsubcodeQName, const char *faultstring, const char *faultdetailXML)
Definition: stdsoap2.cpp:22636

References NULL, and soap_sender_fault_subcode().

Referenced by ns1__executeCommand().

◆ soap_sender_fault_subcode()

SOAP_FMAC1 int SOAP_FMAC2 soap_sender_fault_subcode ( struct soap soap,
const char *  faultsubcodeQName,
const char *  faultstring,
const char *  faultdetailXML 
)

Definition at line 22636 of file stdsoap2.cpp.

22637 {
22638  return soap_copy_fault(soap, soap->version == 2 ? "SOAP-ENV:Sender" : soap->version == 1 ? "SOAP-ENV:Client" : "at source", faultsubcodeQName, faultstring, faultdetailXML);
22639 }

References soap_copy_fault(), and soap::version.

Referenced by soap_sender_fault().

◆ soap_serializefault()

SOAP_FMAC3 void SOAP_FMAC4 soap_serializefault ( struct soap soap)

Definition at line 72 of file soapC.cpp.

73 {
74  if (soap->fault)
76 }
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Fault(struct soap *soap, const struct SOAP_ENV__Fault *a)
Definition: soapC.cpp:637

References soap::fault, and soap_serialize_SOAP_ENV__Fault().

Referenced by soap_send_fault().

◆ soap_serializeheader()

SOAP_FMAC3 void SOAP_FMAC4 soap_serializeheader ( struct soap soap)

Definition at line 45 of file soapC.cpp.

46 {
47  if (soap->version && soap->header)
49 }
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Header(struct soap *soap, const struct SOAP_ENV__Header *a)
Definition: soapC.cpp:1172

References soap::header, soap_serialize_SOAP_ENV__Header(), and soap::version.

Referenced by soap_send_fault(), and soap_serve_ns1__executeCommand().

◆ soap_serve()

SOAP_FMAC5 int SOAP_FMAC6 soap_serve ( struct soap soap)

Definition at line 21 of file soapServer.cpp.

22 {
23 #ifndef WITH_FASTCGI
25 #endif
26  do
27  {
28 #ifndef WITH_FASTCGI
29  if (soap->keep_alive > 0 && soap->max_keep_alive > 0)
30  soap->keep_alive--;
31 #endif
33  { if (soap->error >= SOAP_STOP)
34  continue;
35  return soap->error;
36  }
38  {
39 #ifdef WITH_FASTCGI
41 #else
42  return soap_send_fault(soap);
43 #endif
44  }
45 #ifdef WITH_FASTCGI
47  soap_end(soap);
48  } while (1);
49 #else
50  } while (soap->keep_alive);
51 #endif
52  return SOAP_OK;
53 }
SOAP_FMAC5 int SOAP_FMAC6 soap_serve_request(struct soap *soap)
Definition: soapServer.cpp:56
SOAP_FMAC1 int SOAP_FMAC2 soap_begin_serve(struct soap *soap)
Definition: stdsoap2.cpp:20414
#define soap_destroy(soap)
Definition: stdsoap2.h:3071

References soap::error, soap::fserveloop, soap::keep_alive, soap::max_keep_alive, soap_begin_serve(), soap_destroy, soap_end(), soap_send_fault(), soap_serve_request(), and SOAP_STOP.

Referenced by process_message().

◆ soap_serve_request()

SOAP_FMAC5 int SOAP_FMAC6 soap_serve_request ( struct soap soap)

Definition at line 56 of file soapServer.cpp.

57 {
58  (void)soap_peek_element(soap);
59  if (!soap_match_tag(soap, soap->tag, "ns1:executeCommand"))
61  return soap->error = SOAP_NO_METHOD;
62 }
SOAP_FMAC5 int SOAP_FMAC6 soap_serve_ns1__executeCommand(struct soap *soap)
Definition: soapServer.cpp:65

References soap::error, soap_match_tag(), SOAP_NO_METHOD, soap_peek_element(), soap_serve_ns1__executeCommand(), and soap::tag.

Referenced by soap_serve().

◆ soap_set_attr()

SOAP_FMAC1 int SOAP_FMAC2 soap_set_attr ( struct soap soap,
const char *  name,
const char *  value,
int  flag 
)

Definition at line 14068 of file stdsoap2.cpp.

14069 {
14070  struct soap_attribute *tp, *tq;
14071  if (*name == '-')
14072  return SOAP_OK;
14073  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Set attribute %s='%s'\n", name, value ? value : SOAP_STR_EOS));
14074  tq = NULL;
14075  for (tp = soap->attributes; tp; tq = tp, tp = tp->next)
14076  {
14077  if (!strcmp(tp->name, name))
14078  break;
14079  }
14080  if (!tp)
14081  {
14082  size_t l = strlen(name);
14083  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Allocate attribute %s\n", name));
14084  if (sizeof(struct soap_attribute) + l > l && (SOAP_MAXALLOCSIZE <= 0 || sizeof(struct soap_attribute) + l <= SOAP_MAXALLOCSIZE))
14085  tp = (struct soap_attribute*)SOAP_MALLOC(soap, sizeof(struct soap_attribute) + l);
14086  if (!tp)
14087  return soap->error = SOAP_EOM;
14088  tp->ns = NULL;
14089 #ifndef WITH_LEAN
14090  if ((soap->mode & SOAP_XML_CANONICAL))
14091  {
14092  struct soap_attribute **tpp = &soap->attributes;
14093  const char *s = strchr(name, ':');
14094  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inserting attribute %s for c14n\n", name));
14095  if (!strncmp(name, "xmlns", 5))
14096  {
14097  for (; *tpp; tpp = &(*tpp)->next)
14098  if (strncmp((*tpp)->name, "xmlns", 5) || strcmp((*tpp)->name + 5, name + 5) > 0)
14099  break;
14100  }
14101  else if (!s)
14102  {
14103  for (; *tpp; tpp = &(*tpp)->next)
14104  if (strncmp((*tpp)->name, "xmlns", 5) && ((*tpp)->ns || strcmp((*tpp)->name, name) > 0))
14105  break;
14106  }
14107  else
14108  {
14109  struct soap_nlist *np = soap_lookup_ns(soap, name, s - name);
14110  if (np)
14111  {
14112  tp->ns = np->ns;
14113  }
14114  else
14115  {
14116  struct soap_attribute *tq;
14117  for (tq = soap->attributes; tq; tq = tq->next)
14118  {
14119  if (!strncmp(tq->name, "xmlns:", 6) && !strncmp(tq->name + 6, name, s - name) && !tq->name[6 + s - name])
14120  {
14121  tp->ns = tq->ns;
14122  break;
14123  }
14124  }
14125  }
14126  for (; *tpp; tpp = &(*tpp)->next)
14127  {
14128  int k;
14129  if (strncmp((*tpp)->name, "xmlns", 5) && (*tpp)->ns && tp->ns && ((k = strcmp((*tpp)->ns, tp->ns)) > 0 || (!k && strcmp((*tpp)->name, name) > 0)))
14130  break;
14131  }
14132  }
14133  tp->next = *tpp;
14134  *tpp = tp;
14135  }
14136  else
14137 #endif
14138  if (tq)
14139  {
14140  tq->next = tp;
14141  tp->next = NULL;
14142  }
14143  else
14144  {
14145  tp->next = soap->attributes;
14146  soap->attributes = tp;
14147  }
14148  soap_strcpy((char*)tp->name, l + 1, name);
14149  tp->value = NULL;
14150  }
14151  else if (tp->visible)
14152  {
14153  return SOAP_OK;
14154  }
14155  else if (value && tp->value && tp->size <= strlen(value))
14156  {
14157  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free attribute value of %s (free %p)\n", name, (void*)tp->value));
14158  SOAP_FREE(soap, tp->value);
14159  tp->value = NULL;
14160  tp->ns = NULL;
14161  }
14162  if (value)
14163  {
14164  if (!tp->value)
14165  {
14166  tp->size = strlen(value) + 1;
14167  if (SOAP_MAXALLOCSIZE <= 0 || tp->size <= SOAP_MAXALLOCSIZE)
14168  tp->value = (char*)SOAP_MALLOC(soap, tp->size);
14169  if (!tp->value)
14170  return soap->error = SOAP_EOM;
14171  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Allocate attribute value for %s (%p)\n", tp->name, (void*)tp->value));
14172  }
14173  soap_strcpy(tp->value, tp->size, value);
14174  if (!strncmp(tp->name, "xmlns:", 6))
14175  tp->ns = tp->value;
14176  tp->visible = 2;
14177  tp->flag = (short)flag;
14178 #ifndef WITH_LEAN
14179  if (!strcmp(name, "wsu:Id"))
14180  {
14182  soap_strcpy(soap->id, sizeof(soap->id), value);
14183  }
14185  {
14186  const char *s = strchr(name, ':');
14187  if (s && strchr(value, ':'))
14188  {
14189  struct soap_nlist *np = soap_lookup_ns(soap, name, s - name);
14190  if (np && np->ns && soap->local_namespaces)
14191  {
14192  if ((!strcmp(s + 1, "type") && !strcmp(np->ns, soap->local_namespaces[2].ns)) /* xsi:type QName */
14193  || ((!strcmp(s + 1, "arrayType") || !strcmp(s + 1, "itemType")) && !strcmp(np->ns, soap->local_namespaces[1].ns))) /* SOAP-ENC:arrayType and SOAP-ENC:itemType QName */
14194  soap_utilize_ns(soap, value, 1);
14195  }
14196  }
14197  }
14198 #endif
14199  }
14200  else
14201  {
14202  tp->visible = 1;
14203  }
14204  return SOAP_OK;
14205 }
SOAP_FMAC1 struct soap_nlist *SOAP_FMAC2 soap_lookup_ns(struct soap *soap, const char *tag, size_t n)
Definition: stdsoap2.cpp:12644

References soap::attributes, DBGLOG, soap::error, soap::event, soap_attribute::flag, soap::id, mpq::l, soap::local_namespaces, soap::mode, name, soap_attribute::name, soap_attribute::next, Namespace::ns, soap_nlist::ns, soap_attribute::ns, NULL, soap_attribute::size, SOAP_EOM, SOAP_FREE, soap_lookup_ns(), SOAP_MALLOC, SOAP_MAXALLOCSIZE, SOAP_OK, SOAP_SEC_BEGIN, SOAP_STR_EOS, soap_strcpy, soap_utilize_ns(), SOAP_XML_CANONICAL, SOAP_XML_CANONICAL_NA, TEST(), soap_attribute::value, and soap_attribute::visible.

Referenced by soap_attribute(), soap_body_begin_out(), soap_element(), soap_element_start_end_out(), soap_out_SOAP_ENV__Reason(), and soap_QName2s().

◆ soap_set_dime()

SOAP_FMAC1 void SOAP_FMAC2 soap_set_dime ( struct soap soap)

Definition at line 20079 of file stdsoap2.cpp.

20080 {
20081  soap->omode |= SOAP_ENC_DIME;
20082  soap->dime.first = NULL;
20083  soap->dime.last = NULL;
20084 }

References soap::dime, soap_dime::first, soap_dime::last, NULL, soap::omode, and SOAP_ENC_DIME.

◆ soap_set_dime_attachment()

SOAP_FMAC1 int SOAP_FMAC2 soap_set_dime_attachment ( struct soap soap,
const char *  ptr,
size_t  size,
const char *  type,
const char *  id,
unsigned short  optype,
const char *  option 
)

Definition at line 20246 of file stdsoap2.cpp.

20247 {
20249  if (!content)
20250  return SOAP_EOM;
20251  content->id = soap_strdup(soap, id);
20252  content->type = soap_strdup(soap, type);
20253  content->options = soap_dime_option(soap, optype, option);
20254  return SOAP_OK;
20255 }
SOAP_FMAC1 char *SOAP_FMAC2 soap_dime_option(struct soap *soap, unsigned short optype, const char *option)
Definition: stdsoap2.cpp:19176

References soap::dime, soap_dime::first, soap_multipart::id, soap_dime::last, soap_multipart::options, ptr(), soap_multipart::size, soap_alloc_multipart(), soap_dime_option(), SOAP_EOM, SOAP_OK, soap_strdup(), and soap_multipart::type.

◆ soap_set_embedded()

SOAP_FMAC1 void SOAP_FMAC2 soap_set_embedded ( struct soap soap,
struct soap_plist pp 
)

Definition at line 10200 of file stdsoap2.cpp.

10201 {
10202  if (!pp)
10203  return;
10204  if ((soap->mode & SOAP_IO_LENGTH))
10205  pp->mark1 = 1;
10206  else
10207  pp->mark2 = 1;
10208 }

References soap_plist::mark1, soap_plist::mark2, soap::mode, and SOAP_IO_LENGTH.

Referenced by soap_element_id(), and soap_embed().

◆ soap_set_endpoint()

SOAP_FMAC1 void SOAP_FMAC2 soap_set_endpoint ( struct soap soap,
const char *  endpoint 
)

Definition at line 21139 of file stdsoap2.cpp.

21140 {
21141  const char *s, *t;
21142  size_t i, n;
21143  soap->endpoint[0] = '\0';
21144  soap->host[0] = '\0';
21145  soap->path[0] = '/';
21146  soap->path[1] = '\0';
21147  soap->port = 80;
21148  if (!endpoint || !*endpoint)
21149  return;
21150 #ifdef WITH_OPENSSL
21151  if (!soap_tag_cmp(endpoint, "https:*"))
21152  soap->port = 443;
21153 #endif
21154  soap_strcpy(soap->endpoint, sizeof(soap->endpoint), endpoint);
21155  s = strchr(endpoint, ':');
21156  if (s && s[1] == '/' && s[2] == '/')
21157  s += 3;
21158  else
21159  s = endpoint;
21160 #if !defined(WITH_NOHTTP) || !defined(WITH_LEANER)
21161  t = strchr(s, '@');
21162  if (t && *s != ':' && *s != '@')
21163  {
21164  size_t l = t - s + 1;
21165  char *r = (char*)soap_malloc(soap, l);
21166  n = s - endpoint;
21167  if (r)
21168  {
21169  s = soap_decode(r, l, s, ":@");
21170  soap->userid = r;
21172  if (*s == ':')
21173  {
21174  s++;
21175  if (*s != '@')
21176  {
21177  l = t - s + 1;
21178  r = r + strlen(r) + 1;
21179  s = soap_decode(r, l, s, "@");
21180  soap->passwd = r;
21181  }
21182  }
21183  }
21184  s++;
21185  soap_strcpy(soap->endpoint + n, sizeof(soap->endpoint) - n, s);
21186  }
21187 #endif
21188  n = strlen(s);
21189  if (n >= sizeof(soap->host))
21190  n = sizeof(soap->host) - 1;
21191 #ifdef WITH_IPV6
21192  if (s[0] == '[')
21193  {
21194  s++;
21195  for (i = 0; i < n; i++)
21196  {
21197  if (s[i] == ']')
21198  {
21199  s++;
21200  --n;
21201  break;
21202  }
21203  soap->host[i] = s[i];
21204  }
21205  }
21206  else
21207  {
21208  for (i = 0; i < n; i++)
21209  {
21210  soap->host[i] = s[i];
21211  if (s[i] == '/' || s[i] == ':' || s[i] == '?')
21212  break;
21213  }
21214  }
21215 #else
21216  for (i = 0; i < n; i++)
21217  {
21218  soap->host[i] = s[i];
21219  if (s[i] == '/' || s[i] == ':' || s[i] == '?')
21220  break;
21221  }
21222 #endif
21223  soap->host[i] = '\0';
21224  if (s[i] == ':')
21225  {
21226  soap->port = (int)soap_strtol(s + i + 1, NULL, 10);
21227  for (i++; i < n; i++)
21228  if (s[i] == '/')
21229  break;
21230  }
21231  if (i < n && s[i])
21232  soap_strcpy(soap->path, sizeof(soap->path), s + i);
21234  {
21236  if (soap->override_port)
21238  }
21239  if (soap->userid && !soap->authrealm)
21240  soap->authrealm = soap->host;
21241 }

References soap::authrealm, soap::endpoint, soap::host, mpq::l, NULL, soap::override_host, soap::override_port, soap::passwd, soap::path, soap::port, soap_decode(), soap_malloc(), SOAP_STR_EOS, soap_strcpy, soap_strtol, soap_tag_cmp(), and soap::userid.

Referenced by soap_try_connect_command().

◆ soap_set_fault()

SOAP_FMAC1 void SOAP_FMAC2 soap_set_fault ( struct soap soap)

Definition at line 21965 of file stdsoap2.cpp.

21966 {
21967  const char **c;
21968  const char **s;
21969  if (soap->version == 0)
21970  soap_version(soap);
21971  c = soap_faultcode(soap);
21972  s = soap_faultstring(soap);
21973  if (soap->fseterror)
21974  soap->fseterror(soap, c, s);
21975  if (!*c)
21976  {
21977  if (soap->version == 2)
21978  *c = "SOAP-ENV:Sender";
21979  else if (soap->version == 1)
21980  *c = "SOAP-ENV:Client";
21981  else
21982  *c = "";
21983  }
21984  if (*s)
21985  return;
21986  if (soap->error >= SOAP_POST)
21988  switch (soap->error)
21989  {
21990 #ifndef WITH_LEAN
21991  case SOAP_CLI_FAULT:
21992  *s = "Client fault";
21993  break;
21994  case SOAP_SVR_FAULT:
21995  *s = "Server fault";
21996  break;
21997  case SOAP_TAG_MISMATCH:
21998  *s = soap_set_validation_fault(soap, "tag name or namespace mismatch", NULL);
21999  break;
22000  case SOAP_TYPE:
22001  if (*soap->type)
22002  *s = soap_set_validation_fault(soap, "type mismatch ", soap->type);
22003  else if (*soap->arrayType)
22004  *s = soap_set_validation_fault(soap, "array type mismatch", NULL);
22005  else
22006  *s = soap_set_validation_fault(soap, "invalid value", NULL);
22007  break;
22008  case SOAP_SYNTAX_ERROR:
22009  *s = soap_set_validation_fault(soap, "syntax error", NULL);
22010  break;
22011  case SOAP_NO_TAG:
22012  if (soap->version == 0 && soap->level == 0)
22013  *s = soap_set_validation_fault(soap, "root element expected", NULL);
22014  else if (soap->level == 0)
22015  *s = soap_set_validation_fault(soap, "SOAP message expected", NULL);
22016  else
22017  *s = soap_set_validation_fault(soap, "element tag expected", NULL);
22018  break;
22019  case SOAP_END_TAG:
22020  *s = soap_set_validation_fault(soap, "closing tag expected", NULL);
22021  break;
22022  case SOAP_MUSTUNDERSTAND:
22023  *c = "SOAP-ENV:MustUnderstand";
22024  (SOAP_SNPRINTF(soap->msgbuf, sizeof(soap->msgbuf), strlen(soap->tag) + 65), "The data in element '%s' must be understood but cannot be processed", soap->tag);
22025  *s = soap->msgbuf;
22026  break;
22027  case SOAP_VERSIONMISMATCH:
22028  *c = "SOAP-ENV:VersionMismatch";
22029  *s = "Invalid SOAP message or SOAP version mismatch";
22030  break;
22032  *c = "SOAP-ENV:DataEncodingUnknown";
22033  *s = "Unsupported SOAP data encoding";
22034  break;
22035  case SOAP_NAMESPACE:
22036  *s = soap_set_validation_fault(soap, "namespace error", NULL);
22037  break;
22038  case SOAP_USER_ERROR:
22039  *s = "User data access error";
22040  break;
22041  case SOAP_NO_METHOD:
22042  (SOAP_SNPRINTF(soap->msgbuf, sizeof(soap->msgbuf), strlen(soap->tag) + 66), "Method '%s' not implemented: method name or namespace not recognized", soap->tag);
22043  *s = soap->msgbuf;
22044  break;
22045  case SOAP_NO_DATA:
22046  *s = "Data required for operation";
22047  break;
22048  case SOAP_GET_METHOD:
22049  *s = "HTTP GET method not implemented";
22050  break;
22051  case SOAP_PUT_METHOD:
22052  *s = "HTTP PUT method not implemented";
22053  break;
22054  case SOAP_PATCH_METHOD:
22055  *s = "HTTP PATCH method not implemented";
22056  break;
22057  case SOAP_DEL_METHOD:
22058  *s = "HTTP DELETE method not implemented";
22059  break;
22060  case SOAP_HTTP_METHOD:
22061  *s = "HTTP method error";
22062  break;
22063  case SOAP_EOM:
22064  *s = "Out of memory";
22065  break;
22066  case SOAP_MOE:
22067  *s = "Memory overflow or memory corruption error";
22068  break;
22069  case SOAP_HDR:
22070  *s = "Header line too long";
22071  break;
22072  case SOAP_IOB:
22073  *s = "Array index out of bounds";
22074  break;
22075  case SOAP_NULL:
22076  *s = soap_set_validation_fault(soap, "nil not allowed", NULL);
22077  break;
22078  case SOAP_DUPLICATE_ID:
22079  *s = soap_set_validation_fault(soap, "multiple elements (use the SOAP_XML_TREE flag) with duplicate id ", soap->id);
22080  if (soap->version == 2)
22081  *soap_faultsubcode(soap) = "SOAP-ENC:DuplicateID";
22082  break;
22083  case SOAP_MISSING_ID:
22084  *s = soap_set_validation_fault(soap, "missing id for ref ", soap->id);
22085  if (soap->version == 2)
22086  *soap_faultsubcode(soap) = "SOAP-ENC:MissingID";
22087  break;
22088  case SOAP_HREF:
22089  *s = soap_set_validation_fault(soap, "incompatible object type id-ref ", soap->id);
22090  break;
22091  case SOAP_FAULT:
22092  break;
22093 #ifndef WITH_NOIO
22094  case SOAP_UDP_ERROR:
22095  *s = "Message too large for UDP packet";
22096  break;
22097  case SOAP_TCP_ERROR:
22098  *s = tcp_error(soap);
22099  break;
22100 #endif
22101  case SOAP_HTTP_ERROR:
22102  *s = "An HTTP processing error occurred";
22103  break;
22104  case SOAP_NTLM_ERROR:
22105  *s = "An HTTP NTLM authentication error occurred";
22106  break;
22107  case SOAP_SSL_ERROR:
22108 #ifdef WITH_OPENSSL
22109  *s = "SSL/TLS error";
22110 #else
22111  *s = "OpenSSL not installed: recompile with -DWITH_OPENSSL";
22112 #endif
22113  break;
22114  case SOAP_PLUGIN_ERROR:
22115  *s = "Plugin registry error";
22116  break;
22117  case SOAP_DIME_ERROR:
22118  *s = "DIME format error or max DIME size exceeds SOAP_MAXDIMESIZE currently set to " SOAP_XSTRINGIFY(SOAP_MAXDIMESIZE);
22119  break;
22120  case SOAP_DIME_HREF:
22121  *s = "DIME href to missing attachment";
22122  break;
22123  case SOAP_DIME_MISMATCH:
22124  *s = "DIME version/transmission error";
22125  break;
22126  case SOAP_DIME_END:
22127  *s = "End of DIME error";
22128  break;
22129  case SOAP_MIME_ERROR:
22130  *s = "MIME format error";
22131  break;
22132  case SOAP_MIME_HREF:
22133  *s = "MIME href to missing attachment";
22134  break;
22135  case SOAP_MIME_END:
22136  *s = "End of MIME error";
22137  break;
22138  case SOAP_ZLIB_ERROR:
22139 #ifdef WITH_ZLIB
22140  (SOAP_SNPRINTF(soap->msgbuf, sizeof(soap->msgbuf), (soap->d_stream && soap->d_stream->msg ? strlen(soap->d_stream->msg) : 0) + 19), "Zlib/gzip error: '%s'", soap->d_stream && soap->d_stream->msg ? soap->d_stream->msg : SOAP_STR_EOS);
22141  *s = soap->msgbuf;
22142 #else
22143  *s = "Zlib/gzip not installed for (de)compression: recompile with -DWITH_GZIP";
22144 #endif
22145  break;
22146  case SOAP_REQUIRED:
22147  *s = soap_set_validation_fault(soap, "missing required attribute", NULL);
22148  break;
22149  case SOAP_PROHIBITED:
22150  *s = soap_set_validation_fault(soap, "prohibited attribute present", NULL);
22151  break;
22152  case SOAP_LEVEL:
22153  *s = "Maximum XML nesting depth level exceeded: increase maxlevel";
22154  break;
22155  case SOAP_LENGTH:
22156  *s = soap_set_validation_fault(soap, "value range or content length violation", NULL);
22157  break;
22158  case SOAP_OCCURS:
22159  *s = soap_set_validation_fault(soap, "occurrence constraint violation", NULL);
22160  break;
22161  case SOAP_FIXED:
22162  *s = soap_set_validation_fault(soap, "value does not match the fixed value required", NULL);
22163  break;
22164  case SOAP_EMPTY:
22165  *s = soap_set_validation_fault(soap, "empty value provided where a value is required", NULL);
22166  break;
22167  case SOAP_FD_EXCEEDED:
22168  *s = "Maximum number of open connections was reached: increase FD_SETSIZE or define HAVE_POLL";
22169  break;
22170  case SOAP_UTF_ERROR:
22171  *s = "UTF content encoding error";
22172  break;
22173  case SOAP_STOP:
22174  *s = "Stopped: service request already handled by plugin (informative)";
22175  break;
22176 #endif
22177  case SOAP_EOF:
22178 #ifndef WITH_NOIO
22179  *s = soap_strerror(soap); /* *s = soap->msgbuf */
22180 #ifndef WITH_LEAN
22181  if (strlen(soap->msgbuf) + 25 < sizeof(soap->msgbuf))
22182  {
22183  (void)soap_memmove((void*)(soap->msgbuf + 25), sizeof(soap->tmpbuf) - 25, (const void*)soap->msgbuf, strlen(soap->msgbuf) + 1);
22184  if (soap->is)
22185 #if defined(__cplusplus) && !defined(WITH_COMPAT)
22186  (void)soap_memcpy((void*)soap->msgbuf, sizeof(soap->msgbuf), (const void*)"End or bad std::istream: ", 25);
22187 #else
22188  (void)soap_memcpy((void*)soap->msgbuf, sizeof(soap->msgbuf), (const void*)"End at NUL buffer input: ", 25);
22189 #endif
22190  else
22191  (void)soap_memcpy((void*)soap->msgbuf, sizeof(soap->msgbuf), (const void*)"End of file or no input: ", 25);
22192  }
22193 #endif
22194  break;
22195 #else
22196  *s = "End of file or no input";
22197  break;
22198 #endif
22199  case SOAP_ERR:
22200  *s = "An unspecified error occurred";
22201  break;
22202  default:
22203 #ifndef WITH_NOHTTP
22204 #ifndef WITH_LEAN
22205  if (soap->error >= 200 && soap->error < 600)
22206  {
22207  const char *t = http_error(soap, soap->error);
22208  (SOAP_SNPRINTF(soap->msgbuf, sizeof(soap->msgbuf), strlen(t) + 54), "Error %d: HTTP %d %s", soap->error, soap->error, t);
22209  *s = soap->msgbuf;
22210  }
22211  else
22212 #endif
22213 #endif
22214  {
22215  (SOAP_SNPRINTF(soap->msgbuf, sizeof(soap->msgbuf), 26), "Error %d", soap->error);
22216  *s = soap->msgbuf;
22217  }
22218  }
22219 }
static const char * soap_strerror(struct soap *)
Definition: stdsoap2.cpp:22477
static const char * soap_set_validation_fault(struct soap *, const char *, const char *)
Definition: stdsoap2.cpp:21948
static const char * http_error(struct soap *, int)
Definition: stdsoap2.cpp:7953
#define SOAP_DEL_METHOD
Definition: stdsoap2.h:1546
#define SOAP_ERR
Definition: stdsoap2.h:1582
#define SOAP_FD_EXCEEDED
Definition: stdsoap2.h:1575
#define SOAP_XSTRINGIFY(s)
Definition: stdsoap2.h:151
#define SOAP_USER_ERROR
Definition: stdsoap2.h:1538
#define SOAP_PUT_METHOD
Definition: stdsoap2.h:1544
#define SOAP_NTLM_ERROR
Definition: stdsoap2.h:1577
#define SOAP_PATCH_METHOD
Definition: stdsoap2.h:1545

References soap::arrayType, mpq::c, soap::d_stream, soap::error, soap::fseterror, http_error(), soap::id, soap::is, soap::level, soap::msgbuf, NULL, SOAP_CLI_FAULT, SOAP_DATAENCODINGUNKNOWN, SOAP_DEL_METHOD, SOAP_DIME_END, SOAP_DIME_ERROR, SOAP_DIME_HREF, SOAP_DIME_MISMATCH, SOAP_DUPLICATE_ID, SOAP_EMPTY, SOAP_END_TAG, SOAP_EOF, SOAP_EOM, SOAP_ERR, SOAP_FAULT, soap_faultcode(), soap_faultstring(), soap_faultsubcode(), SOAP_FD_EXCEEDED, SOAP_FIXED, SOAP_GET_METHOD, SOAP_HDR, SOAP_HREF, SOAP_HTTP_ERROR, SOAP_HTTP_METHOD, SOAP_IOB, SOAP_LENGTH, SOAP_LEVEL, SOAP_MAXDIMESIZE, soap_memcpy, soap_memmove, SOAP_MIME_END, SOAP_MIME_ERROR, SOAP_MIME_HREF, SOAP_MISSING_ID, SOAP_MOE, SOAP_MUSTUNDERSTAND, SOAP_NAMESPACE, SOAP_NO_DATA, SOAP_NO_METHOD, SOAP_NO_TAG, SOAP_NTLM_ERROR, SOAP_NULL, SOAP_OCCURS, SOAP_PATCH_METHOD, SOAP_PLUGIN_ERROR, SOAP_POST, SOAP_PROHIBITED, SOAP_PUT_METHOD, SOAP_REQUIRED, soap_set_validation_fault(), SOAP_SNPRINTF, SOAP_SSL_ERROR, SOAP_STOP, SOAP_STR_EOS, soap_strerror(), SOAP_SVR_FAULT, SOAP_SYNTAX_ERROR, SOAP_TAG_MISMATCH, SOAP_TCP_ERROR, SOAP_TYPE, SOAP_UDP_ERROR, SOAP_USER_ERROR, SOAP_UTF_ERROR, soap_version(), SOAP_VERSIONMISMATCH, SOAP_XSTRINGIFY, SOAP_ZLIB_ERROR, soap::tag, tcp_error(), soap::tmpbuf, soap::type, and soap::version.

Referenced by soap_print_fault(), soap_recv_fault(), soap_send_fault(), and soap_sprint_fault().

◆ soap_set_local_namespaces()

SOAP_FMAC1 void SOAP_FMAC2 soap_set_local_namespaces ( struct soap soap)

Definition at line 12576 of file stdsoap2.cpp.

12577 {
12579  {
12580  const struct Namespace *ns1;
12581  struct Namespace *ns2;
12582  size_t n = 1;
12583  for (ns1 = soap->namespaces; ns1->id; ns1++)
12584  n++;
12585  n *= sizeof(struct Namespace);
12586  ns2 = (struct Namespace*)SOAP_MALLOC(soap, n);
12587  if (ns2)
12588  {
12589  (void)soap_memcpy((void*)ns2, n, (const void*)soap->namespaces, n);
12590  if (ns2[0].ns)
12591  {
12592  if (!strcmp(ns2[0].ns, soap_env1))
12593  soap->version = 1;
12594  else if (!strcmp(ns2[0].ns, soap_env2))
12595  soap->version = 2;
12596  }
12597  soap->local_namespaces = ns2;
12598  for (; ns2->id; ns2++)
12599  ns2->out = NULL;
12600  }
12601  }
12602 }
static const char soap_env1[42]
Definition: stdsoap2.cpp:325
static const char soap_env2[40]
Definition: stdsoap2.cpp:327

References Namespace::id, if(), soap::local_namespaces, soap::namespaces, Namespace::ns, NULL, Namespace::out, soap_env1, soap_env2, SOAP_MALLOC, soap_memcpy, and soap::version.

Referenced by soap_begin_count(), soap_begin_recv(), soap_copy_context(), soap_copy_stream(), soap_init_send(), soap_set_namespaces(), and soap_set_version().

◆ soap_set_mime()

SOAP_FMAC1 void SOAP_FMAC2 soap_set_mime ( struct soap soap,
const char *  boundary,
const char *  start 
)

Definition at line 20093 of file stdsoap2.cpp.

20094 {
20095  soap->omode |= SOAP_ENC_MIME;
20096  soap->mime.first = NULL;
20097  soap->mime.last = NULL;
20098  soap->mime.boundary = soap_strdup(soap, boundary);
20099  soap->mime.start = soap_strdup(soap, start);
20100 }

References soap_mime::boundary, soap_mime::first, soap_mime::last, soap::mime, NULL, soap::omode, SOAP_ENC_MIME, soap_strdup(), and soap_mime::start.

◆ soap_set_mime_attachment()

SOAP_FMAC1 int SOAP_FMAC2 soap_set_mime_attachment ( struct soap soap,
const char *  ptr,
size_t  size,
enum soap_mime_encoding  encoding,
const char *  type,
const char *  id,
const char *  location,
const char *  description 
)

Definition at line 20264 of file stdsoap2.cpp.

20265 {
20267  if (!content)
20268  return SOAP_EOM;
20269  content->id = soap_strdup(soap, id);
20270  content->type = soap_strdup(soap, type);
20271  content->encoding = encoding;
20272  content->location = soap_strdup(soap, location);
20273  content->description = soap_strdup(soap, description);
20274  return SOAP_OK;
20275 }
CHARSET_INFO fields description

References soap_multipart::description, description, soap_multipart::encoding, soap_mime::first, soap_multipart::id, soap_mime::last, soap_multipart::location, soap::mime, ptr(), soap_multipart::size, soap_alloc_multipart(), SOAP_EOM, SOAP_OK, soap_strdup(), and soap_multipart::type.

Referenced by soap_getmimehdr().

◆ soap_set_namespaces()

SOAP_FMAC1 int SOAP_FMAC2 soap_set_namespaces ( struct soap soap,
const struct Namespace p 
)

Definition at line 12513 of file stdsoap2.cpp.

12514 {
12515  struct Namespace *ns = soap->local_namespaces;
12516  struct soap_nlist *np, *nq, *nr;
12517  unsigned int level = soap->level;
12518  soap->namespaces = p;
12521  /* reverse the namespace list */
12522  np = soap->nlist;
12523  soap->nlist = NULL;
12524  if (np)
12525  {
12526  nq = np->next;
12527  np->next = NULL;
12528  while (nq)
12529  {
12530  nr = nq->next;
12531  nq->next = np;
12532  np = nq;
12533  nq = nr;
12534  }
12535  }
12536  /* then push on new stack */
12537  while (np)
12538  {
12539  const char *s;
12540  soap->level = np->level; /* preserve element nesting level */
12541  s = np->ns;
12542  if (!s && np->index >= 0 && ns)
12543  {
12544  s = ns[np->index].out;
12545  if (!s)
12546  s = ns[np->index].ns;
12547  }
12548  if (s)
12549  (void)soap_push_namespace(soap, np->id, s);
12550  nq = np;
12551  np = np->next;
12552  SOAP_FREE(soap, nq);
12553  }
12554  if (ns)
12555  {
12556  int i;
12557  for (i = 0; ns[i].id; i++)
12558  {
12559  if (ns[i].out)
12560  {
12561  SOAP_FREE(soap, ns[i].out);
12562  ns[i].out = NULL;
12563  }
12564  }
12565  SOAP_FREE(soap, ns);
12566  }
12567  soap->level = level; /* restore level */
12568  return SOAP_OK;
12569 }

References soap_nlist::id, soap_nlist::index, soap_nlist::level, soap::level, soap::local_namespaces, soap::namespaces, soap_nlist::next, soap::nlist, Namespace::ns, soap_nlist::ns, NULL, SOAP_FREE, SOAP_OK, soap_push_namespace(), and soap_set_local_namespaces().

◆ soap_set_receiver_error()

SOAP_FMAC1 int SOAP_FMAC2 soap_set_receiver_error ( struct soap soap,
const char *  faultstring,
const char *  faultdetailXML,
int  soaperror 
)

Definition at line 22600 of file stdsoap2.cpp.

22601 {
22602  return soap_set_error(soap, soap->version == 2 ? "SOAP-ENV:Receiver" : soap->version == 1 ? "SOAP-ENV:Server" : "detected", NULL, faultstring, faultdetailXML, soaperror);
22603 }
static int soap_set_error(struct soap *, const char *, const char *, const char *, const char *, int)
Definition: stdsoap2.cpp:22570

References NULL, soap_set_error(), and soap::version.

Referenced by soap_accept(), soap_begin_recv(), soap_bind(), soap_poll(), soap_ready(), and tcp_connect().

◆ soap_set_recv_logfile()

SOAP_FMAC1 void SOAP_FMAC2 soap_set_recv_logfile ( struct soap soap,
const char *  logfile 
)

Definition at line 11664 of file stdsoap2.cpp.

11665 {
11666  (void)soap; (void)logfile;
11667 #ifdef SOAP_DEBUG
11668  soap_set_logfile(soap, SOAP_INDEX_RECV, logfile);
11669 #endif
11670 }

References SOAP_INDEX_RECV.

Referenced by soap_copy(), soap_copy_context(), and soap_init().

◆ soap_set_sender_error()

SOAP_FMAC1 int SOAP_FMAC2 soap_set_sender_error ( struct soap soap,
const char *  faultstring,
const char *  faultdetailXML,
int  soaperror 
)

Definition at line 22590 of file stdsoap2.cpp.

22591 {
22592  return soap_set_error(soap, soap->version == 2 ? "SOAP-ENV:Sender" : soap->version == 1 ? "SOAP-ENV:Client" : "at sender", NULL, faultstring, faultdetailXML, soaperror);
22593 }

References NULL, soap_set_error(), and soap::version.

Referenced by tcp_connect().

◆ soap_set_sent_logfile()

SOAP_FMAC1 void SOAP_FMAC2 soap_set_sent_logfile ( struct soap soap,
const char *  logfile 
)

Definition at line 11677 of file stdsoap2.cpp.

11678 {
11679  (void)soap; (void)logfile;
11680 #ifdef SOAP_DEBUG
11681  soap_set_logfile(soap, SOAP_INDEX_SENT, logfile);
11682 #endif
11683 }

References SOAP_INDEX_SENT.

Referenced by soap_copy(), soap_copy_context(), and soap_init().

◆ soap_set_test_logfile()

SOAP_FMAC1 void SOAP_FMAC2 soap_set_test_logfile ( struct soap soap,
const char *  logfile 
)

Definition at line 11690 of file stdsoap2.cpp.

11691 {
11692  (void)soap; (void)logfile;
11693 #ifdef SOAP_DEBUG
11694  soap_set_logfile(soap, SOAP_INDEX_TEST, logfile);
11695 #endif
11696 }

References SOAP_INDEX_TEST.

Referenced by soap_copy(), soap_copy_context(), and soap_init().

◆ soap_set_version()

SOAP_FMAC1 void SOAP_FMAC2 soap_set_version ( struct soap soap,
short  version 
)

Definition at line 12450 of file stdsoap2.cpp.

12451 {
12454  {
12455  if (version == 1)
12456  {
12459  }
12460  else if (version == 2)
12461  {
12464  }
12465  soap->version = version;
12466  }
12467  if (version == 0)
12469  else
12470  soap->encodingStyle = NULL;
12471 }
version
Definition: setup.py:15
static const char soap_enc2[40]
Definition: stdsoap2.cpp:328
static const char soap_enc1[42]
Definition: stdsoap2.cpp:326

References soap::encodingStyle, Namespace::id, soap::local_namespaces, Namespace::ns, NULL, soap_enc1, soap_enc2, soap_env1, soap_env2, soap_set_local_namespaces(), SOAP_STR_EOS, soap::version, and setup::version.

◆ soap_short2s()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_short2s ( struct soap soap,
short  n 
)

Definition at line 16472 of file stdsoap2.cpp.

16473 {
16474  return soap_long2s(soap, (long)n);
16475 }

References soap_long2s().

◆ soap_size()

SOAP_FMAC1 size_t SOAP_FMAC2 soap_size ( const int *  size,
int  dim 
)

Definition at line 3435 of file stdsoap2.cpp.

3436 {
3437  int i;
3438  size_t n = 0;
3439  if (size[0] <= 0)
3440  return 0;
3441  n = (size_t)size[0];
3442  for (i = 1; i < dim; i++)
3443  {
3444  if (size[i] <= 0)
3445  return 0;
3446  n *= (size_t)size[i];
3447  }
3448  return (size_t)n;
3449 }

References soap_ilist::size.

◆ soap_size_block()

SOAP_FMAC1 size_t SOAP_FMAC2 soap_size_block ( struct soap soap,
struct soap_blist b,
size_t  n 
)

Definition at line 3218 of file stdsoap2.cpp.

3219 {
3220  if (!b)
3221  b = soap->blist;
3222  if (b->head)
3223  {
3224  b->size -= b->head->size - n;
3225  b->head->size = n;
3226  }
3227  return b->size;
3228 }

References b, and soap::blist.

Referenced by soap_gethex(), soap_http_get_body_prefix(), soap_peek_element(), soap_recv_mime_attachment(), soap_string_in(), and soap_wstring_in().

◆ soap_sprint_fault()

SOAP_FMAC1 char* SOAP_FMAC2 soap_sprint_fault ( struct soap soap,
char *  buf,
size_t  len 
)

Definition at line 22742 of file stdsoap2.cpp.

22743 {
22744  if (soap_check_state(soap))
22745  {
22746  soap_strcpy(buf, len, "Error: soap struct not initialized");
22747  }
22748  else if (soap->error)
22749  {
22750  const char **c, *v = NULL, *s, *d;
22751  c = soap_faultcode(soap);
22752  if (!*c)
22753  {
22755  c = soap_faultcode(soap);
22756  }
22757  if (soap->version == 2)
22758  v = soap_fault_subcode(soap);
22759  if (!v)
22760  v = "no subcode";
22761  s = soap_fault_string(soap);
22762  if (!s)
22763  s = "[no reason]";
22765  if (!d)
22766  d = "[no detail]";
22767  (SOAP_SNPRINTF(buf, len, strlen(*c) + strlen(v) + strlen(s) + strlen(d) + 72), "%s%d fault %s [%s]\n\"%s\"\nDetail: %s\n", soap->version ? "SOAP 1." : "Error ", soap->version ? (int)soap->version : soap->error, *c, v, s, d);
22768  }
22769  else if (len > 0)
22770  {
22771  *buf = '\0';
22772  }
22773  return buf;
22774 }

References mpq::c, mpq::d, soap::error, NULL, soap_check_state, soap_fault_detail(), soap_fault_string(), soap_fault_subcode(), soap_faultcode(), soap_set_fault(), SOAP_SNPRINTF, soap_strcpy, and soap::version.

◆ soap_ssl_accept()

SOAP_FMAC1 int SOAP_FMAC2 soap_ssl_accept ( struct soap )

◆ soap_ssl_client_context()

SOAP_FMAC1 int SOAP_FMAC2 soap_ssl_client_context ( struct soap soap,
unsigned short  flags,
const char *  keyfile,
const char *  password,
const char *  cafile,
const char *  capath,
const char *  randfile 
)

◆ soap_ssl_crl()

SOAP_FMAC1 int SOAP_FMAC2 soap_ssl_crl ( struct soap ,
const char *   
)

◆ soap_ssl_error()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_ssl_error ( struct soap ,
int  ret,
int  err 
)

Referenced by tcp_connect().

◆ soap_ssl_init()

SOAP_FMAC1 void SOAP_FMAC2 soap_ssl_init ( void  )

Referenced by soap_init().

◆ soap_ssl_noinit()

SOAP_FMAC1 void SOAP_FMAC2 soap_ssl_noinit ( void  )

◆ soap_ssl_server_context()

SOAP_FMAC1 int SOAP_FMAC2 soap_ssl_server_context ( struct soap soap,
unsigned short  flags,
const char *  keyfile,
const char *  password,
const char *  cafile,
const char *  capath,
const char *  dhfile,
const char *  randfile,
const char *  sid 
)

◆ soap_store_lab()

SOAP_FMAC1 int SOAP_FMAC2 soap_store_lab ( struct soap soap,
const char *  s,
size_t  n 
)

Definition at line 14383 of file stdsoap2.cpp.

14384 {
14385  soap->labidx = 0;
14386  return soap_append_lab(soap, s, n);
14387 }

References soap::labidx, and soap_append_lab().

Referenced by soap_peek_element(), and soap_QName2s().

◆ soap_strcat()

SOAP_FMAC1 void SOAP_FMAC2 soap_strcat ( char *  buf,
size_t  len,
const char *  src 
)

Definition at line 13033 of file stdsoap2.cpp.

13034 {
13035  size_t k = strlen(t);
13036  if (k < n)
13037  {
13038  t += k;
13039  n -= k;
13040  while (--n > 0 && *s)
13041  *t++ = *s++;
13042  *t = '\0';
13043  }
13044 }

Referenced by soap_element(), soap_extend_url(), soap_extend_url_query(), soap_putoffsets(), soap_putsizesoffsets(), and soap_url_query().

◆ soap_strdup()

SOAP_FMAC1 char* SOAP_FMAC2 soap_strdup ( struct soap soap,
const char *  s 
)

Definition at line 2789 of file stdsoap2.cpp.

2790 {
2791  char *t = NULL;
2792  if (s)
2793  {
2794  size_t n = strlen(s) + 1;
2795  if (n > 0)
2796  {
2797  t = (char*)soap_malloc(soap, n);
2798  if (t)
2799  {
2800  (void)soap_memcpy((void*)t, n, (const void*)s, n);
2801  t[n - 1] = '\0';
2802  }
2803  }
2804  }
2805  return t;
2806 }

References NULL, soap_malloc(), and soap_memcpy.

Referenced by http_parse_header(), ns1__executeCommand(), soap_attachment(), soap_attachment_forward(), soap_attribute(), soap_collapse(), soap_copy_fault(), soap_current_namespace_att(), soap_current_namespace_tag(), soap_element(), soap_element_start_end_out(), soap_getmimehdr(), soap_http_get_body_prefix(), soap_inliteral(), soap_instring(), soap_peek_element(), soap_QName2s(), soap_s2char(), soap_s2QName(), soap_set_dime_attachment(), soap_set_mime(), soap_set_mime_attachment(), soap_string_in(), soap_string_out(), soap_try_connect_command(), and soap_value().

◆ soap_string_in()

SOAP_FMAC1 char* SOAP_FMAC2 soap_string_in ( struct soap soap,
int  flag,
long  minlen,
long  maxlen,
const char *  pattern 
)

Definition at line 15157 of file stdsoap2.cpp.

15158 {
15159  char *s;
15160  char *t = NULL;
15161  size_t i;
15162  ULONG64 l = 0;
15163  int n = 0, f = 0, m = 0;
15164  soap_wchar c;
15165 #if !defined(WITH_LEANER) && defined(HAVE_WCTOMB)
15166  char buf[MB_LEN_MAX > 8 ? MB_LEN_MAX : 8];
15167 #else
15168  char buf[8];
15169 #endif
15170  if (maxlen < 0 && soap->maxlength > 0)
15171  maxlen = soap->maxlength;
15172  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Reading string content, flag=%d\n", flag));
15173  if (flag <= 0 && soap->peeked && *soap->tag)
15174  {
15175 #ifndef WITH_LEAN
15176  struct soap_attribute *tp;
15177  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "String content includes tag '%s' and attributes\n", soap->tag));
15178  t = soap->tmpbuf;
15179  *t = '<';
15180  soap_strcpy(t + 1, sizeof(soap->tmpbuf) - 1, soap->tag);
15181  t += strlen(t);
15182  for (tp = soap->attributes; tp; tp = tp->next)
15183  {
15184  if (tp->visible)
15185  {
15186  size_t k = strlen(tp->name);
15187  if (t + k + 1 >= soap->tmpbuf + sizeof(soap->tmpbuf))
15188  break; /* too many or attribute values to large */
15189  *t++ = ' ';
15190  (void)soap_strncpy(t, sizeof(soap->tmpbuf) - (t - soap->tmpbuf), tp->name, k);
15191  t += k;
15192  if (tp->value)
15193  {
15194  k = strlen(tp->value);
15195  if (t + k + 3 >= soap->tmpbuf + sizeof(soap->tmpbuf))
15196  break; /* too many or attribute values to large */
15197  *t++ = '=';
15198  *t++ = '"';
15199  (void)soap_strncpy(t, sizeof(soap->tmpbuf) - (t - soap->tmpbuf), tp->value, k);
15200  t += k;
15201  *t++ = '"';
15202  }
15203  }
15204  }
15205  if (!soap->body)
15206  *t++ = '/';
15207  *t++ = '>';
15208  *t = '\0';
15209  t = soap->tmpbuf;
15210  m = (int)strlen(soap->tmpbuf);
15211 #endif
15212  if (soap->body)
15213  n = 1;
15214  f = 1;
15215  soap->peeked = 0;
15216  }
15217 #ifdef WITH_CDATA
15218  if (flag <= 0)
15219  {
15220  int state = 0;
15221 #ifdef WITH_FAST
15222  soap->labidx = 0; /* use look-aside buffer */
15223 #else
15224  if (soap_alloc_block(soap) == NULL)
15225  return NULL;
15226 #endif
15227  for (;;)
15228  {
15229 #ifdef WITH_FAST
15230  size_t k;
15231  if (soap_append_lab(soap, NULL, 0)) /* allocate more space in look-aside buffer if necessary */
15232  return NULL;
15233  s = soap->labbuf + soap->labidx; /* space to populate */
15234  k = soap->lablen - soap->labidx; /* number of bytes available */
15235  soap->labidx = soap->lablen; /* claim this space */
15236 #else
15237  size_t k = SOAP_BLKLEN;
15238  s = (char*)soap_push_block(soap, NULL, k);
15239  if (!s)
15240  return NULL;
15241 #endif
15242  for (i = 0; i < k; i++)
15243  {
15244  if (m > 0)
15245  {
15246  *s++ = *t++; /* copy multibyte characters */
15247  m--;
15248  continue;
15249  }
15250  c = soap_getchar(soap);
15251  if ((int)c == EOF)
15252  goto end;
15253  if ((c >= 0x80 || c < SOAP_AP) && state != 1)
15254  {
15255  if ((c & 0x7FFFFFFF) >= 0x80)
15256  {
15257  soap_unget(soap, c);
15258  c = soap_getutf8(soap);
15259  }
15260  if ((c & 0x7FFFFFFF) >= 0x80 && (flag <= 0 || (soap->mode & SOAP_C_UTFSTRING)))
15261  {
15262  c &= 0x7FFFFFFF;
15263  t = buf;
15264  if (c < 0x0800)
15265  *t++ = (char)(0xC0 | ((c >> 6) & 0x1F));
15266  else
15267  {
15268 #ifdef WITH_REPLACE_ILLEGAL_UTF8
15269  if (!((c >= 0x80 && c <= 0xD7FF) || (c >= 0xE000 && c <= 0xFFFD) || (c >= 0x10000 && c <= 0x10FFFF)))
15270  c = SOAP_UNKNOWN_UNICODE_CHAR;
15271 #endif
15272  if (c < 0x010000)
15273  {
15274  *t++ = (char)(0xE0 | ((c >> 12) & 0x0F));
15275  }
15276  else
15277  {
15278  if (c < 0x200000)
15279  {
15280  *t++ = (char)(0xF0 | ((c >> 18) & 0x07));
15281  }
15282  else
15283  {
15284  if (c < 0x04000000)
15285  {
15286  *t++ = (char)(0xF8 | ((c >> 24) & 0x03));
15287  }
15288  else
15289  {
15290  *t++ = (char)(0xFC | ((c >> 30) & 0x01));
15291  *t++ = (char)(0x80 | ((c >> 24) & 0x3F));
15292  }
15293  *t++ = (char)(0x80 | ((c >> 18) & 0x3F));
15294  }
15295  *t++ = (char)(0x80 | ((c >> 12) & 0x3F));
15296  }
15297  *t++ = (char)(0x80 | ((c >> 6) & 0x3F));
15298  }
15299  *t++ = (char)(0x80 | (c & 0x3F));
15300  m = (int)(t - buf) - 1;
15301  t = buf;
15302  *s++ = *t++;
15303  continue;
15304  }
15305  }
15306  switch (state)
15307  {
15308  case 1:
15309  if (c == ']')
15310  state = 4;
15311  *s++ = (char)c;
15312  continue;
15313  case 2:
15314  if (c == '-')
15315  state = 6;
15316  *s++ = (char)c;
15317  continue;
15318  case 3:
15319  if (c == '?')
15320  state = 8;
15321  *s++ = (char)c;
15322  continue;
15323  /* CDATA */
15324  case 4:
15325  if (c == ']')
15326  state = 5;
15327  else
15328  state = 1;
15329  *s++ = (char)c;
15330  continue;
15331  case 5:
15332  if (c == '>')
15333  state = 0;
15334  else if (c != ']')
15335  state = 1;
15336  *s++ = (char)c;
15337  continue;
15338  /* comment */
15339  case 6:
15340  if (c == '-')
15341  state = 7;
15342  else
15343  state = 2;
15344  *s++ = (char)c;
15345  continue;
15346  case 7:
15347  if (c == '>')
15348  state = 0;
15349  else if (c != '-')
15350  state = 2;
15351  *s++ = (char)c;
15352  continue;
15353  /* PI */
15354  case 8:
15355  if (c == '>')
15356  state = 0;
15357  else if (c != '?')
15358  state = 3;
15359  *s++ = (char)c;
15360  continue;
15361  }
15362  switch (c)
15363  {
15364  case SOAP_TT:
15365  if (n == 0)
15366  goto end;
15367  n--;
15368  *s++ = '<';
15369  t = (char*)"/";
15370  m = 1;
15371  break;
15372  case SOAP_LT:
15373  if (flag == 3 || (f && n == 0))
15374  goto end;
15375  n++;
15376  *s++ = '<';
15377  break;
15378  case SOAP_GT:
15379  *s++ = '>';
15380  break;
15381  case SOAP_QT:
15382  *s++ = '"';
15383  break;
15384  case SOAP_AP:
15385  *s++ = '\'';
15386  break;
15387  case '/':
15388  if (n > 0)
15389  {
15390  c = soap_getchar(soap);
15391  if (c == '>')
15392  n--;
15393  soap_unget(soap, c);
15394  }
15395  *s++ = '/';
15396  break;
15397  case '<':
15398  c = soap_getchar(soap);
15399  if (c == '/')
15400  {
15401  if (n == 0)
15402  {
15403  c = SOAP_TT;
15404  goto end;
15405  }
15406  n--;
15407  }
15408  else if (c == '!')
15409  {
15410  c = soap_getchar(soap);
15411  if (c == '[')
15412  {
15413  do
15414  {
15415  c = soap_getchar(soap);
15416  } while ((int)c != EOF && c != '[');
15417  if ((int)c == EOF)
15418  goto end;
15419  t = (char*)"![CDATA[";
15420  m = 8;
15421  state = 1;
15422  }
15423  else if (c == '-')
15424  {
15425  c = soap_getchar(soap);
15426  if (c == '-')
15427  state = 2;
15428  t = (char*)"!-";
15429  m = 2;
15430  soap_unget(soap, c);
15431  }
15432  else
15433  {
15434  t = (char*)"!";
15435  m = 1;
15436  soap_unget(soap, c);
15437  }
15438  *s++ = '<';
15439  break;
15440  }
15441  else if (c == '?')
15442  {
15443  state = 3;
15444  }
15445  else if (flag == 3 || (f && n == 0))
15446  {
15447  soap_revget1(soap);
15448  c = '<';
15449  goto end;
15450  }
15451  else
15452  n++;
15453  soap_unget(soap, c);
15454  *s++ = '<';
15455  break;
15456  case '>':
15457  *s++ = '>';
15458  break;
15459  case '"':
15460  *s++ = '"';
15461  break;
15462  default:
15463 #ifndef WITH_LEANER
15464 #ifdef HAVE_WCTOMB
15465  if ((soap->mode & SOAP_C_MBSTRING))
15466  {
15467 #if defined(WIN32) && !defined(CYGWIN) && !defined(__MINGW32__) && !defined(__MINGW64__) && !defined(__BORLANDC__)
15468  m = 0;
15469  wctomb_s(&m, buf, sizeof(buf), (wchar_t)(c & 0x7FFFFFFF));
15470 #else
15471  m = wctomb(buf, (wchar_t)(c & 0x7FFFFFFF));
15472 #endif
15473  if (m >= 1 && m <= (int)MB_CUR_MAX)
15474  {
15475  t = buf;
15476  *s++ = *t++;
15477  m--;
15478  }
15479  else
15480  {
15481  *s++ = SOAP_UNKNOWN_CHAR;
15482  m = 0;
15483  }
15484  }
15485  else
15486 #endif
15487 #endif
15488  *s++ = (char)(c & 0xFF);
15489  }
15490  l++;
15491  if (maxlen >= 0 && l > (size_t)maxlen)
15492  {
15493  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "String too long: maxlen=%ld\n", maxlen));
15494  soap->error = SOAP_LENGTH;
15495  return NULL;
15496  }
15497  }
15498  }
15499  }
15500 #endif
15501 #ifdef WITH_FAST
15502  soap->labidx = 0; /* use look-aside buffer */
15503 #else
15504  if (soap_alloc_block(soap) == NULL)
15505  return NULL;
15506 #endif
15507  for (;;)
15508  {
15509 #ifdef WITH_FAST
15510  size_t k;
15511  if (soap_append_lab(soap, NULL, 0)) /* allocate more space in look-aside buffer if necessary */
15512  return NULL;
15513  s = soap->labbuf + soap->labidx; /* space to populate */
15514  k = soap->lablen - soap->labidx; /* number of bytes available */
15515  soap->labidx = soap->lablen; /* claim this space */
15516 #else
15517  size_t k = SOAP_BLKLEN;
15518  s = (char*)soap_push_block(soap, NULL, k);
15519  if (!s)
15520  return NULL;
15521 #endif
15522  for (i = 0; i < k; i++)
15523  {
15524  if (m > 0)
15525  {
15526  *s++ = *t++; /* copy multibyte characters */
15527  m--;
15528  continue;
15529  }
15530 #ifndef WITH_CDATA
15531  if (flag <= 0)
15532  c = soap_getchar(soap);
15533  else
15534 #endif
15535  {
15536  c = soap_getutf8(soap);
15537  if ((soap->mode & SOAP_C_UTFSTRING))
15538  {
15539  if (c >= 0x80 || (c < SOAP_AP && c >= -0x7FFFFF80))
15540  {
15541  c &= 0x7FFFFFFF;
15542  t = buf;
15543  if (c < 0x0800)
15544  {
15545  *t++ = (char)(0xC0 | ((c >> 6) & 0x1F));
15546  }
15547  else
15548  {
15549 #ifdef WITH_REPLACE_ILLEGAL_UTF8
15550  if (!((c >= 0x80 && c <= 0xD7FF) || (c >= 0xE000 && c <= 0xFFFD) || (c >= 0x10000 && c <= 0x10FFFF)))
15551  c = SOAP_UNKNOWN_UNICODE_CHAR;
15552 #endif
15553  if (c < 0x010000)
15554  {
15555  *t++ = (char)(0xE0 | ((c >> 12) & 0x0F));
15556  }
15557  else
15558  {
15559  if (c < 0x200000)
15560  {
15561  *t++ = (char)(0xF0 | ((c >> 18) & 0x07));
15562  }
15563  else
15564  {
15565  if (c < 0x04000000)
15566  {
15567  *t++ = (char)(0xF8 | ((c >> 24) & 0x03));
15568  }
15569  else
15570  {
15571  *t++ = (char)(0xFC | ((c >> 30) & 0x01));
15572  *t++ = (char)(0x80 | ((c >> 24) & 0x3F));
15573  }
15574  *t++ = (char)(0x80 | ((c >> 18) & 0x3F));
15575  }
15576  *t++ = (char)(0x80 | ((c >> 12) & 0x3F));
15577  }
15578  *t++ = (char)(0x80 | ((c >> 6) & 0x3F));
15579  }
15580  *t++ = (char)(0x80 | (c & 0x3F));
15581  m = (int)(t - buf) - 1;
15582  t = buf;
15583  *s++ = *t++;
15584  l++;
15585  if (maxlen >= 0 && l > (size_t)maxlen)
15586  {
15587  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "String too long: maxlen=%ld\n", maxlen));
15588  soap->error = SOAP_LENGTH;
15589  return NULL;
15590  }
15591  continue;
15592  }
15593  }
15594  }
15595  switch (c)
15596  {
15597  case SOAP_TT:
15598  if (n == 0)
15599  goto end;
15600  n--;
15601  *s++ = '<';
15602  t = (char*)"/";
15603  m = 1;
15604  break;
15605  case SOAP_LT:
15606  if (flag == 3 || (f && n == 0))
15607  goto end;
15608  n++;
15609  *s++ = '<';
15610  break;
15611  case SOAP_GT:
15612  *s++ = '>';
15613  break;
15614  case SOAP_QT:
15615  *s++ = '"';
15616  break;
15617  case SOAP_AP:
15618  *s++ = '\'';
15619  break;
15620  case '/':
15621  if (n > 0)
15622  {
15623  if (flag > 0)
15624  {
15625  c = soap_get(soap);
15626  if (c == SOAP_GT)
15627  n--;
15628  }
15629  else
15630  {
15631  c = soap_getchar(soap);
15632  if (c == '>')
15633  n--;
15634  }
15635  soap_unget(soap, c);
15636  }
15637  *s++ = '/';
15638  break;
15639  case (soap_wchar)('<' | 0x80000000):
15640  if (flag > 0)
15641  {
15642  *s++ = '<';
15643  }
15644  else
15645  {
15646  *s++ = '&';
15647  t = (char*)"lt;";
15648  m = 3;
15649  }
15650  break;
15651  case (soap_wchar)('>' | 0x80000000):
15652  if (flag > 0)
15653  {
15654  *s++ = '>';
15655  }
15656  else
15657  {
15658  *s++ = '&';
15659  t = (char*)"gt;";
15660  m = 3;
15661  }
15662  break;
15663  case (soap_wchar)('&' | 0x80000000):
15664  if (flag > 0)
15665  {
15666  *s++ = '&';
15667  }
15668  else
15669  {
15670  *s++ = '&';
15671  t = (char*)"amp;";
15672  m = 4;
15673  }
15674  break;
15675  case (soap_wchar)('"' | 0x80000000):
15676  if (flag > 0)
15677  {
15678  *s++ = '"';
15679  }
15680  else
15681  {
15682  *s++ = '&';
15683  t = (char*)"quot;";
15684  m = 5;
15685  }
15686  break;
15687  case (soap_wchar)('\'' | 0x80000000):
15688  if (flag > 0)
15689  {
15690  *s++ = '\'';
15691  }
15692  else
15693  {
15694  *s++ = '&';
15695  t = (char*)"apos;";
15696  m = 5;
15697  }
15698  break;
15699  default:
15700  if ((int)c == EOF)
15701  goto end;
15702 #ifndef WITH_CDATA
15703  if (c == '<')
15704  {
15705  c = soap_getchar(soap);
15706  soap_unget(soap, c);
15707  if (c == '/')
15708  {
15709  c = SOAP_TT;
15710  if (n == 0)
15711  goto end;
15712  n--;
15713  }
15714  else
15715  {
15716  n++;
15717  }
15718  *s++ = '<';
15719  }
15720  else
15721 #endif
15722 #ifndef WITH_LEANER
15723 #ifdef HAVE_WCTOMB
15724  if ((soap->mode & SOAP_C_MBSTRING))
15725  {
15726 #if defined(WIN32) && !defined(CYGWIN) && !defined(__MINGW32__) && !defined(__MINGW64__) && !defined(__BORLANDC__)
15727  m = 0;
15728  wctomb_s(&m, buf, sizeof(buf), (wchar_t)(c & 0x7FFFFFFF));
15729 #else
15730  m = wctomb(buf, (wchar_t)(c & 0x7FFFFFFF));
15731 #endif
15732  if (m >= 1 && m <= (int)MB_CUR_MAX)
15733  {
15734  t = buf;
15735  *s++ = *t++;
15736  m--;
15737  }
15738  else
15739  {
15740  *s++ = SOAP_UNKNOWN_CHAR;
15741  m = 0;
15742  }
15743  }
15744  else
15745 #endif
15746 #endif
15747  *s++ = (char)(c & 0xFF);
15748  }
15749  l++;
15750  if (maxlen >= 0 && l > (size_t)maxlen)
15751  {
15752  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "String too long: maxlen=%ld\n", maxlen));
15753  soap->error = SOAP_LENGTH;
15754  return NULL;
15755  }
15756  }
15757  }
15758 end:
15759  soap_unget(soap, c);
15760  *s = '\0';
15761 #ifdef WITH_FAST
15762  t = soap_strdup(soap, soap->labbuf);
15763  if (!t)
15764  return NULL;
15765 #else
15766  soap_size_block(soap, NULL, i + 1);
15767  t = soap_save_block(soap, NULL, NULL, 0);
15768 #endif
15769  if (minlen > 0 && l < (size_t)minlen)
15770  {
15771  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "String too short: %lu chars, minlen=%ld\n", (unsigned long)l, minlen));
15772  soap->error = SOAP_LENGTH;
15773  return NULL;
15774  }
15775 #ifdef WITH_DOM
15776  if ((soap->mode & SOAP_XML_DOM) && soap->dom && *t)
15777  {
15778  if (flag > 0)
15779  soap->dom->text = t;
15780  else
15781  soap->dom->code = t;
15782  }
15783 #endif
15784  if (flag == 2)
15785  {
15786  if (soap_s2QName(soap, t, &t, minlen, maxlen, pattern))
15787  return NULL;
15788  }
15789  else if (flag >= 4 && t)
15790  {
15791  t = soap_collapse(soap, t, flag, 1);
15792  }
15793 #ifndef WITH_LEANER
15794  else if (pattern && soap->fsvalidate)
15795  {
15796  soap->error = soap->fsvalidate(soap, pattern, t);
15797  if (soap->error)
15798  return NULL;
15799  }
15800 #endif
15801  return t;
15802 }
SOAP_FMAC1 int SOAP_FMAC2 soap_s2QName(struct soap *soap, const char *s, char **t, long minlen, long maxlen, const char *pattern)
Definition: stdsoap2.cpp:17521
#define SOAP_UNKNOWN_CHAR
Definition: stdsoap2.cpp:97
#define SOAP_C_UTFSTRING
Definition: stdsoap2.h:1725
#define SOAP_C_MBSTRING
Definition: stdsoap2.h:1726

References soap::attributes, soap::body, mpq::c, soap_dom_element::code, DBGLOG, soap::dom, soap::error, f(), soap_attribute::flag, soap::fsvalidate, mpq::l, soap::labbuf, soap::labidx, soap::lablen, soap::maxlength, soap::mode, soap_attribute::name, soap_attribute::next, NULL, soap::peeked, soap_alloc_block(), SOAP_AP, soap_append_lab(), SOAP_BLKLEN, SOAP_C_MBSTRING, SOAP_C_UTFSTRING, soap_collapse(), soap_get(), soap_getchar(), soap_getutf8(), SOAP_GT, SOAP_LENGTH, SOAP_LT, soap_push_block(), SOAP_QT, soap_revget1, soap_s2QName(), soap_save_block(), soap_size_block(), soap_strcpy, soap_strdup(), soap_strncpy, SOAP_TT, soap_unget, SOAP_UNKNOWN_CHAR, SOAP_XML_DOM, soap::tag, TEST(), soap_dom_element::text, soap::tmpbuf, ULONG64, soap_attribute::value, and soap_attribute::visible.

Referenced by soap_element_end_in(), soap_getbase64(), soap_gethex(), soap_ignore(), soap_inliteral(), and soap_instring().

◆ soap_string_out()

SOAP_FMAC1 int SOAP_FMAC2 soap_string_out ( struct soap soap,
const char *  s,
int  flag 
)

Definition at line 15054 of file stdsoap2.cpp.

15055 {
15056  const char *t;
15057  soap_wchar c;
15058  soap_wchar mask = (soap_wchar)0xFFFFFF80UL;
15059 #ifdef WITH_DOM
15060  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
15061  {
15062  soap->dom->text = soap_strdup(soap, s);
15063  if (!soap->dom->text)
15064  return soap->error = SOAP_EOM;
15065  return SOAP_OK;
15066  }
15067 #endif
15068  if (flag == 2 || (soap->mode & SOAP_C_UTFSTRING))
15069  mask = 0;
15070  t = s;
15071  while ((c = *t++))
15072  {
15073  switch (c)
15074  {
15075  case 0x09:
15076  if (flag)
15077  {
15078  if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&#x9;", 5))
15079  return soap->error;
15080  s = t;
15081  }
15082  break;
15083  case 0x0A:
15084  if (flag)
15085  {
15086  if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&#xA;", 5))
15087  return soap->error;
15088  s = t;
15089  }
15090  break;
15091  case '&':
15092  if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&amp;", 5))
15093  return soap->error;
15094  s = t;
15095  break;
15096  case '<':
15097  if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&lt;", 4))
15098  return soap->error;
15099  s = t;
15100  break;
15101  case '>':
15102  if (!flag)
15103  {
15104  if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&gt;", 4))
15105  return soap->error;
15106  s = t;
15107  }
15108  break;
15109  case '"':
15110  if (flag)
15111  {
15112  if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&quot;", 6))
15113  return soap->error;
15114  s = t;
15115  }
15116  break;
15117  case 0x7F:
15118  if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&#x7F;", 6))
15119  return soap->error;
15120  s = t;
15121  break;
15122  default:
15123 #ifndef WITH_LEANER
15124 #ifdef HAVE_MBTOWC
15125  if ((soap->mode & SOAP_C_MBSTRING))
15126  {
15127  wchar_t wc;
15128  int m = mbtowc(&wc, t - 1, MB_CUR_MAX);
15129  if (m > 0 && !((soap_wchar)wc == c && m == 1 && c < 0x80))
15130  {
15131  if (soap_send_raw(soap, s, t - s - 1) || soap_pututf8(soap, (unsigned long)wc))
15132  return soap->error;
15133  s = t += m - 1;
15134  continue;
15135  }
15136  }
15137 #endif
15138 #endif
15139 #ifndef WITH_NOSTRINGTOUTF8
15140  if ((c & mask) || !(c & 0xFFFFFFE0UL))
15141  {
15142  if (soap_send_raw(soap, s, t - s - 1) || soap_pututf8(soap, (unsigned char)c))
15143  return soap->error;
15144  s = t;
15145  }
15146 #endif
15147  }
15148  }
15149  return soap_send_raw(soap, s, t - s - 1);
15150 }

References mpq::c, soap::dom, soap::error, soap_attribute::flag, soap::mode, SOAP_C_MBSTRING, SOAP_C_UTFSTRING, SOAP_EOM, SOAP_OK, soap_pututf8(), soap_send_raw(), soap_strdup(), SOAP_XML_DOM, and soap_dom_element::text.

Referenced by soap_attribute(), soap_element_result(), soap_element_start_end_out(), soap_outbyte(), soap_outdateTime(), soap_outdouble(), soap_outfloat(), soap_outint(), soap_outlong(), soap_outLONG64(), soap_outshort(), soap_outstring(), soap_outULONG64(), soap_outunsignedByte(), soap_outunsignedInt(), soap_outunsignedLong(), and soap_outunsignedShort().

◆ soap_strncat()

SOAP_FMAC1 int SOAP_FMAC2 soap_strncat ( char *  buf,
size_t  len,
const char *  src,
size_t  num 
)

Definition at line 13054 of file stdsoap2.cpp.

13055 {
13056  size_t k;
13057  if (!t || !s)
13058  return 1;
13059  k = strlen(t);
13060  if (n <= k + m)
13061  return 1;
13062  t += k;
13063  n -= k;
13064  while (--n > 0 && *s)
13065  *t++ = *s++;
13066  *t = '\0';
13067  return 0;
13068 }

Referenced by http_parse(), http_parse_header(), and soap_recv_mime_attachment().

◆ soap_strtrim()

SOAP_FMAC1 char* SOAP_FMAC2 soap_strtrim ( struct soap soap,
char *  s 
)

Definition at line 2841 of file stdsoap2.cpp.

2842 {
2843  (void)soap;
2844  if (s)
2845  {
2846  char *t;
2847  while ((*s >= 9 && *s <= 13) || *s == 32)
2848  s++;
2849  t = s;
2850  while (*t)
2851  t++;
2852  while (--t > s && ((*t >= 9 && *t <= 13) || *t == 32))
2853  continue;
2854  t[1] = '\0';
2855  }
2856  return s;
2857 }

◆ soap_tag_cmp()

SOAP_FMAC1 int SOAP_FMAC2 soap_tag_cmp ( const char *  s,
const char *  t 
)

Definition at line 3723 of file stdsoap2.cpp.

3724 {
3725  const char *a = NULL;
3726  const char *b = NULL;
3727  for (;;)
3728  {
3729  int c1 = *s;
3730  int c2 = *t;
3731  if (!c1 || c1 == '"')
3732  break;
3733  if (c2 != '-')
3734  {
3735  if (c1 < c2)
3736  {
3737  if (c1 >= 'A' && c1 <= 'Z')
3738  c1 += 'a' - 'A';
3739  }
3740  else if (c1 > c2)
3741  {
3742  if (c2 >= 'A' && c2 <= 'Z')
3743  c2 += 'a' - 'A';
3744  }
3745  if (c2 == '*')
3746  {
3747  c2 = *++t;
3748  if (!c2)
3749  return 0;
3750  a = s;
3751  b = t;
3752  continue;
3753  }
3754  if (c1 != c2)
3755  {
3756  if (!a)
3757  return 1;
3758  s = ++a;
3759  t = b;
3760  continue;
3761  }
3762  }
3763  s++;
3764  t++;
3765  }
3766  if (*t == '*' && !t[1])
3767  return 0;
3768  return *t;
3769 }

References mpq::a, b, and NULL.

Referenced by http_parse_header(), http_post(), soap_code_int(), soap_getmimehdr(), soap_getpi(), soap_http_header_attribute(), soap_push_namespace(), soap_QName2s(), soap_s2double(), soap_s2float(), soap_set_endpoint(), and tcp_connect().

◆ soap_tagsearch()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_tagsearch ( const char *  big,
const char *  little 
)

Definition at line 12610 of file stdsoap2.cpp.

12611 {
12612  if (big && little)
12613  {
12614  size_t n = strlen(little);
12615  const char *s = big;
12616  while (s)
12617  {
12618  const char *t = s;
12619  size_t i;
12620  for (i = 0; i < n; i++, t++)
12621  {
12622  if (*t != little[i])
12623  break;
12624  }
12625  if (*t == '\0' || *t == ' ')
12626  {
12627  if (i == n || (i > 0 && little[i-1] == ':'))
12628  return s;
12629  }
12630  s = strchr(t, ' ');
12631  if (s)
12632  s++;
12633  }
12634  }
12635  return NULL;
12636 }

References NULL.

Referenced by soap_attribute(), soap_element(), soap_element_start_end_out(), and soap_push_ns().

◆ soap_tell()

SOAP_FMAC1 ULONG64 SOAP_FMAC2 soap_tell ( struct soap soap)

Definition at line 2146 of file stdsoap2.cpp.

2147 {
2148  return soap->count - soap->buflen + soap->bufidx - (soap->ahead != 0);
2149 }

References soap::ahead, soap::bufidx, soap::buflen, and soap::count.

Referenced by soap_getdime().

◆ soap_timegm()

SOAP_FMAC1 time_t SOAP_FMAC2 soap_timegm ( struct tm *  T)

Definition at line 18523 of file stdsoap2.cpp.

18524 {
18525 #if defined(HAVE_TIMEGM)
18526  return timegm(T);
18527 #else
18528  time_t t, g, z;
18529  struct tm tm;
18530 #ifndef HAVE_GMTIME_R
18531  struct tm *tp;
18532 #endif
18533  t = mktime(T);
18534  if (t == (time_t)-1)
18535  return (time_t)-1;
18536 #ifdef HAVE_GMTIME_R
18537  if (gmtime_r(&t, &tm) == SOAP_FUNC_R_ERR)
18538  return (time_t)-1;
18539 #else
18540  tp = gmtime(&t);
18541  if (!tp)
18542  return (time_t)-1;
18543  tm = *tp;
18544 #endif
18545  tm.tm_isdst = 0;
18546  g = mktime(&tm);
18547  if (g == (time_t)-1)
18548  return (time_t)-1;
18549  z = g - t;
18550  return t - z;
18551 #endif
18552 }
G3D::int16 z
Definition: Vector3int16.h:46

References gmtime(), detail::gmtime_r(), SOAP_FUNC_R_ERR, and G3D::z.

Referenced by soap_s2dateTime().

◆ soap_track_free()

SOAP_FMAC1 void SOAP_FMAC2 soap_track_free ( struct soap ,
const char *  ,
int  ,
void *   
)

◆ soap_track_malloc()

SOAP_FMAC1 void* SOAP_FMAC2 soap_track_malloc ( struct soap ,
const char *  ,
int  ,
size_t   
)

◆ soap_ULONG642s()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_ULONG642s ( struct soap soap,
ULONG64  n 
)

Definition at line 17284 of file stdsoap2.cpp.

17285 {
17286  (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), 20), SOAP_ULONG_FORMAT, n);
17287  return soap->tmpbuf;
17288 }

References SOAP_SNPRINTF, SOAP_ULONG_FORMAT, and soap::tmpbuf.

Referenced by soap_outULONG64().

◆ soap_unlink()

SOAP_FMAC1 int SOAP_FMAC2 soap_unlink ( struct soap soap,
const void *  p 
)

Definition at line 10800 of file stdsoap2.cpp.

10801 {
10802  char **q;
10803  struct soap_clist **cp;
10804  if (soap && p)
10805  {
10806  for (q = (char**)(void*)&soap->alist; *q; q = *(char***)q)
10807  {
10808  if (p == (void*)(*q - *(size_t*)(*q + sizeof(void*))))
10809  {
10810  *q = **(char***)q;
10811  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unlinked data %p\n", p));
10812 #ifdef SOAP_MEM_DEBUG
10813  soap_track_unlink(soap, p);
10814 #endif
10815  return SOAP_OK; /* found and removed from dealloc chain */
10816  }
10817  }
10818  for (cp = &soap->clist; *cp; cp = &(*cp)->next)
10819  {
10820  if (p == (*cp)->ptr)
10821  {
10822  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unlinked class instance %p\n", p));
10823  q = (char**)*cp;
10824  *cp = (*cp)->next;
10825  SOAP_FREE(soap, q);
10826  return SOAP_OK; /* found and removed from dealloc chain */
10827  }
10828  }
10829  }
10830  return SOAP_ERR;
10831 }

References soap::alist, soap::clist, DBGLOG, soap_clist::next, SOAP_ERR, SOAP_FREE, SOAP_OK, and TEST().

◆ soap_unmark()

SOAP_FMAC1 void SOAP_FMAC2 soap_unmark ( struct soap soap,
char *  mark 
)

Definition at line 13783 of file stdsoap2.cpp.

13784 {
13785  (void)soap;
13786  if (mark)
13787  *mark = 0; /* release detection */
13788 }

Referenced by soap_out_PointerToSOAP_ENV__Code().

◆ soap_unsignedByte2s()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_unsignedByte2s ( struct soap soap,
unsigned char  n 
)

Definition at line 16920 of file stdsoap2.cpp.

16921 {
16922  return soap_unsignedLong2s(soap, (unsigned long)n);
16923 }

References soap_unsignedLong2s().

◆ soap_unsignedInt2s()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_unsignedInt2s ( struct soap soap,
unsigned int  n 
)

Definition at line 17087 of file stdsoap2.cpp.

17088 {
17089  return soap_unsignedLong2s(soap, (unsigned long)n);
17090 }

References soap_unsignedLong2s().

◆ soap_unsignedLong2s()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_unsignedLong2s ( struct soap soap,
unsigned long  n 
)

Definition at line 17185 of file stdsoap2.cpp.

17186 {
17187  (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), 20), "%lu", n);
17188  return soap->tmpbuf;
17189 }

References SOAP_SNPRINTF, and soap::tmpbuf.

Referenced by soap_outunsignedByte(), soap_outunsignedInt(), soap_outunsignedLong(), soap_outunsignedShort(), soap_unsignedByte2s(), soap_unsignedInt2s(), and soap_unsignedShort2s().

◆ soap_unsignedShort2s()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_unsignedShort2s ( struct soap soap,
unsigned short  n 
)

Definition at line 17003 of file stdsoap2.cpp.

17004 {
17005  return soap_unsignedLong2s(soap, (unsigned long)n);
17006 }

References soap_unsignedLong2s().

◆ soap_update_pointers()

SOAP_FMAC1 void SOAP_FMAC2 soap_update_pointers ( struct soap soap,
const char *  dst,
const char *  src,
size_t  len 
)

Definition at line 2978 of file stdsoap2.cpp.

2979 {
2980  const void *start = src, *end = src + len;
2981 #ifndef WITH_LEANER
2982  struct soap_xlist *xp;
2983 #endif
2984 #ifndef WITH_NOIDREF
2985  if ((soap->version && !(soap->imode & SOAP_XML_TREE)) || (soap->mode & SOAP_XML_GRAPH))
2986  {
2987  int i;
2988  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Update pointers %p (%lu bytes) -> %p\n", (void*)src, (unsigned long)len, (void*)dst));
2989  for (i = 0; i < SOAP_IDHASH; i++)
2990  {
2991  struct soap_ilist *ip;
2992  for (ip = soap->iht[i]; ip; ip = ip->next)
2993  {
2994  struct soap_flist *fp;
2995  void *p, **q;
2996  if (ip->shaky)
2997  {
2998  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Update shaky id='%s'\n", ip->id));
2999  if (ip->ptr && ip->ptr >= start && ip->ptr < end)
3000  {
3001  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Update ptr %p -> %p\n", ip->ptr, (void*)((const char*)ip->ptr + (dst-src))));
3002  ip->ptr = (void*)((const char*)ip->ptr + (dst-src));
3003  }
3004  for (q = &ip->link; q; q = (void**)p)
3005  {
3006  p = *q;
3007  if (p && p >= start && p < end)
3008  {
3009  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Link update id='%s' %p -> %p\n", ip->id, p, (void*)((const char*)p + (dst-src))));
3010  *q = (void*)((const char*)p + (dst-src));
3011  }
3012  }
3013  for (q = &ip->copy; q; q = (void**)p)
3014  {
3015  p = *q;
3016  if (p && p >= start && p < end)
3017  {
3018  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy chain update id='%s' %p -> %p\n", ip->id, p, (void*)((const char*)p + (dst-src))));
3019  *q = (void*)((const char*)p + (dst-src));
3020  }
3021  }
3022  for (fp = ip->flist; fp; fp = fp->next)
3023  {
3024  if (fp->ptr >= start && fp->ptr < end)
3025  {
3026  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy list update id='%s' target type=%d %p -> %p\n", ip->id, fp->type, fp->ptr, (void*)((char*)fp->ptr + (dst-src))));
3027  fp->ptr = (void*)((const char*)fp->ptr + (dst-src));
3028  }
3029  }
3030  if (ip->smart && ip->smart >= start && ip->smart < end)
3031  {
3032  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Smart shared pointer update %p -> %p\n", ip->smart, (void*)((const char*)ip->smart + (dst-src))));
3033  ip->smart = (void*)((const char*)ip->smart + (dst-src));
3034  }
3035  }
3036  }
3037  }
3038  }
3039 #else
3040  (void)soap; (void)start; (void)end; (void)dst; (void)src;
3041 #endif
3042 #ifndef WITH_LEANER
3043  for (xp = soap->xlist; xp; xp = xp->next)
3044  {
3045  if (xp->ptr && (void*)xp->ptr >= start && (void*)xp->ptr < end)
3046  {
3047  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Update attachment id='%s' %p -> %p\n", xp->id ? xp->id : SOAP_STR_EOS, (void*)xp->ptr, (void*)((char*)xp->ptr + (dst-src))));
3048  xp->ptr = (unsigned char**)((char*)xp->ptr + (dst-src));
3049  xp->size = (int*)((char*)xp->size + (dst-src));
3050  xp->type = (char**)((char*)xp->type + (dst-src));
3051  xp->options = (char**)((char*)xp->options + (dst-src));
3052  }
3053  }
3054 #endif
3055 }

References soap_ilist::copy, DBGLOG, soap_ilist::flist, soap_xlist::id, soap_ilist::id, soap::iht, soap::imode, soap_ilist::link, soap::mode, soap_xlist::next, soap_flist::next, soap_ilist::next, soap_xlist::options, soap_xlist::ptr, soap_flist::ptr, soap_ilist::ptr, soap_ilist::shaky, soap_xlist::size, soap_ilist::smart, SOAP_IDHASH, SOAP_STR_EOS, SOAP_XML_GRAPH, SOAP_XML_TREE, TEST(), soap_xlist::type, soap_flist::type, soap::version, and soap::xlist.

Referenced by soap_save_block().

◆ soap_url_query()

SOAP_FMAC1 void SOAP_FMAC2 soap_url_query ( struct soap soap,
const char *  s,
const char *  t 
)

Definition at line 8478 of file stdsoap2.cpp.

8479 {
8480  size_t n = strlen(s);
8481  if (n)
8482  {
8483  char *r = soap->msgbuf;
8484  size_t k = n - (s[n-1] == '=');
8485  while ((r = strchr(r, '{')) != NULL)
8486  if (!strncmp(++r, s, k) && r[k] == '}')
8487  break;
8488  if (r)
8489  {
8490  size_t m = t ? strlen(t) : 0;
8491  (void)soap_memmove(r + m - 1, soap->msgbuf + sizeof(soap->msgbuf) - (r + n + 1), r + k + 1, strlen(r + k + 1) + 1);
8492  if (m)
8493  (void)soap_memmove(r - 1, soap->msgbuf + sizeof(soap->msgbuf) - (r - 1), t, m);
8494  }
8495  else
8496  {
8497  soap_strcat(soap->msgbuf, sizeof(soap->msgbuf), s);
8498  if (t)
8499  {
8500  int m = (int)strlen(soap->msgbuf); /* msgbuf length is max SOAP_TMPLEN or just 1024 bytes */
8501  (void)soap_encode_url(t, soap->msgbuf + m, (int)sizeof(soap->msgbuf) - m);
8502  }
8503  soap_strcat(soap->msgbuf, sizeof(soap->msgbuf), "&");
8504  }
8505  }
8506 }

References soap::msgbuf, NULL, soap_encode_url(), soap_memmove, and soap_strcat().

◆ soap_utf8len()

SOAP_FMAC1 size_t SOAP_FMAC2 soap_utf8len ( const char *  s)

Definition at line 2289 of file stdsoap2.cpp.

2290 {
2291  size_t l = 0;
2292  while (*s)
2293  if ((*s++ & 0xC0) != 0x80)
2294  l++;
2295  return l;
2296 }

References mpq::l.

Referenced by soap_QName(), and soap_string().

◆ soap_value()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_value ( struct soap soap)

Definition at line 19002 of file stdsoap2.cpp.

19003 {
19004  size_t i;
19005  soap_wchar c = 0;
19006  char *s = soap->tmpbuf;
19007  if (!soap->body)
19008  return SOAP_STR_EOS;
19009  do
19010  {
19011  c = soap_get(soap);
19012  } while (soap_coblank(c));
19013  for (i = 0; i < sizeof(soap->tmpbuf) - 1; i++)
19014  {
19015  if (c == SOAP_TT || c == SOAP_LT || (int)c == EOF)
19016  break;
19017  *s++ = (char)c;
19018  c = soap_get(soap);
19019  }
19020  for (s--; i > 0; i--, s--)
19021  {
19022  if (!soap_coblank((soap_wchar)*s))
19023  break;
19024  }
19025  s[1] = '\0';
19026  soap->tmpbuf[sizeof(soap->tmpbuf) - 1] = '\0'; /* appease */
19027  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Element content value='%s'\n", soap->tmpbuf));
19028  if (c == SOAP_TT || c == SOAP_LT || (int)c == EOF)
19029  {
19030  soap_unget(soap, c);
19031  }
19032  else
19033  {
19034  soap->error = SOAP_LENGTH;
19035  return NULL;
19036  }
19037 #ifdef WITH_DOM
19038  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
19039  {
19041  if (!soap->dom->text)
19042  return NULL;
19043  }
19044 #endif
19045  return soap->tmpbuf; /* return non-null pointer */
19046 }

References soap::body, mpq::c, DBGLOG, soap::dom, soap::error, soap::mode, NULL, soap_coblank, soap_get(), SOAP_LENGTH, SOAP_LT, SOAP_STR_EOS, soap_strdup(), SOAP_TT, soap_unget, SOAP_XML_DOM, TEST(), soap_dom_element::text, and soap::tmpbuf.

Referenced by soap_inbyte(), soap_indateTime(), soap_indouble(), soap_infloat(), soap_inint(), soap_inlong(), soap_inLONG64(), soap_inshort(), soap_inULONG64(), soap_inunsignedByte(), soap_inunsignedInt(), soap_inunsignedLong(), and soap_inunsignedShort().

◆ soap_wchar2s()

SOAP_FMAC1 const char* SOAP_FMAC2 soap_wchar2s ( struct soap soap,
const wchar_t *  s 
)

Definition at line 18183 of file stdsoap2.cpp.

18184 {
18185  soap_wchar c;
18186  char *r, *t;
18187  const wchar_t *q = s;
18188  size_t n = 0;
18189  if (!s)
18190  return NULL;
18191  while ((c = *q++))
18192  {
18193  if (c > 0 && c < 0x80)
18194  n++;
18195  else
18196 #ifdef WITH_REPLACE_ILLEGAL_UTF8
18197  n += 4;
18198 #else
18199  n += 6;
18200 #endif
18201  }
18202  r = t = (char*)soap_malloc(soap, n + 1);
18203  if (r)
18204  {
18205  /* Convert wchar to UTF8 (chars above U+10FFFF are silently converted, but should not be used) */
18206  while ((c = *s++))
18207  {
18208  if (c > 0 && c < 0x80)
18209  {
18210  *t++ = (char)c;
18211  }
18212  else
18213  {
18214  /* check for UTF16 encoding when wchar_t is too small to hold UCS */
18215  if (sizeof(wchar_t) < 4 && (c & 0xFC00) == 0xD800)
18216  {
18217  soap_wchar d = *s;
18218  if ((d & 0xFC00) == 0xDC00)
18219  {
18220  c = ((c - 0xD800) << 10) + (d - 0xDC00) + 0x10000;
18221  s++;
18222  }
18223 #ifdef WITH_REPLACE_ILLEGAL_UTF8
18224  else
18225  {
18226  c = SOAP_UNKNOWN_UNICODE_CHAR; /* Malformed UTF-16 */
18227  }
18228 #endif
18229  }
18230  if (c < 0x0800)
18231  {
18232  *t++ = (char)(0xC0 | ((c >> 6) & 0x1F));
18233  }
18234  else
18235  {
18236 #ifdef WITH_REPLACE_ILLEGAL_UTF8
18237  if (!((c >= 0x80 && c <= 0xD7FF) || (c >= 0xE000 && c <= 0xFFFD) || (c >= 0x10000 && c <= 0x10FFFF)))
18238  c = SOAP_UNKNOWN_UNICODE_CHAR;
18239 #endif
18240  if (c < 0x010000)
18241  {
18242  *t++ = (char)(0xE0 | ((c >> 12) & 0x0F));
18243  }
18244  else
18245  {
18246  if (c < 0x200000)
18247  {
18248  *t++ = (char)(0xF0 | ((c >> 18) & 0x07));
18249  }
18250  else
18251  {
18252  if (c < 0x04000000)
18253  {
18254  *t++ = (char)(0xF8 | ((c >> 24) & 0x03));
18255  }
18256  else
18257  {
18258  *t++ = (char)(0xFC | ((c >> 30) & 0x01));
18259  *t++ = (char)(0x80 | ((c >> 24) & 0x3F));
18260  }
18261  *t++ = (char)(0x80 | ((c >> 18) & 0x3F));
18262  }
18263  *t++ = (char)(0x80 | ((c >> 12) & 0x3F));
18264  }
18265  *t++ = (char)(0x80 | ((c >> 6) & 0x3F));
18266  }
18267  *t++ = (char)(0x80 | (c & 0x3F));
18268  }
18269  }
18270  *t = '\0';
18271  }
18272  return r;
18273 }

References mpq::c, mpq::d, NULL, and soap_malloc().

Referenced by soap_wstring_in(), and soap_wstring_out().

◆ soap_wstrdup()

SOAP_FMAC1 wchar_t* SOAP_FMAC2 soap_wstrdup ( struct soap soap,
const wchar_t *  s 
)

Definition at line 2813 of file stdsoap2.cpp.

2814 {
2815  wchar_t *t = NULL;
2816  if (s)
2817  {
2818  size_t n = 0, m;
2819  while (s[n])
2820  n++;
2821  n++;
2822  m = sizeof(wchar_t) * n;
2823  if (n > 0)
2824  {
2825  t = (wchar_t*)soap_malloc(soap, m);
2826  if (t)
2827  {
2828  (void)soap_memcpy((void*)t, m, (const void*)s, m);
2829  t[n - 1] = L'\0';
2830  }
2831  }
2832  }
2833  return t;
2834 }

References NULL, soap_malloc(), and soap_memcpy.

Referenced by soap_inwliteral(), soap_inwstring(), soap_s2wchar(), and soap_wcollapse().

◆ soap_wstring_in()

SOAP_FMAC1 wchar_t* SOAP_FMAC2 soap_wstring_in ( struct soap soap,
int  flag,
long  minlen,
long  maxlen,
const char *  pattern 
)

Definition at line 15899 of file stdsoap2.cpp.

15900 {
15901  wchar_t *s;
15902  int i, n = 0, f = 0;
15903  ULONG64 l = 0;
15904  soap_wchar c;
15905  char *t = NULL;
15906  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Reading wide string content\n"));
15907  if (maxlen < 0 && soap->maxlength > 0)
15908  maxlen = soap->maxlength;
15909  if (flag <= 0 && soap->peeked && *soap->tag)
15910  {
15911 #ifndef WITH_LEAN
15912  struct soap_attribute *tp;
15913  t = soap->tmpbuf;
15914  *t = '<';
15915  soap_strcpy(t + 1, sizeof(soap->tmpbuf) - 1, soap->tag);
15916  t += strlen(t);
15917  for (tp = soap->attributes; tp; tp = tp->next)
15918  {
15919  if (tp->visible)
15920  {
15921  size_t k = strlen(tp->name);
15922  if (t + k + 1 >= soap->tmpbuf + sizeof(soap->tmpbuf))
15923  break;
15924  *t++ = ' ';
15925  (void)soap_strncpy(t, sizeof(soap->tmpbuf) - (t - soap->tmpbuf), tp->name, k);
15926  t += k;
15927  if (tp->value)
15928  {
15929  k = strlen(tp->value);
15930  if (t + k + 3 >= soap->tmpbuf + sizeof(soap->tmpbuf))
15931  break;
15932  *t++ = '=';
15933  *t++ = '"';
15934  (void)soap_strncpy(t, sizeof(soap->tmpbuf) - (t - soap->tmpbuf), tp->value, k);
15935  t += k;
15936  *t++ = '"';
15937  }
15938  }
15939  }
15940  if (!soap->body)
15941  *t++ = '/';
15942  *t++ = '>';
15943  *t = '\0';
15944  t = soap->tmpbuf;
15945 #endif
15946  if (soap->body)
15947  n = 1;
15948  f = 1;
15949  soap->peeked = 0;
15950  }
15951  if (soap_alloc_block(soap) == NULL)
15952  return NULL;
15953  for (;;)
15954  {
15955  s = (wchar_t*)soap_push_block(soap, NULL, sizeof(wchar_t)*SOAP_BLKLEN);
15956  if (!s)
15957  return NULL;
15958  for (i = 0; i < SOAP_BLKLEN; i++)
15959  {
15960  if (t)
15961  {
15962  *s++ = (wchar_t)*t++;
15963  if (!*t)
15964  t = NULL;
15965  continue;
15966  }
15967  c = soap_getutf8(soap);
15968  switch (c)
15969  {
15970  case SOAP_TT:
15971  if (n == 0)
15972  goto end;
15973  n--;
15974  *s++ = L'<';
15975  soap_unget(soap, '/');
15976  break;
15977  case SOAP_LT:
15978  if (flag == 3 || (f && n == 0))
15979  goto end;
15980  n++;
15981  *s++ = L'<';
15982  break;
15983  case SOAP_GT:
15984  *s++ = L'>';
15985  break;
15986  case SOAP_QT:
15987  *s++ = L'"';
15988  break;
15989  case SOAP_AP:
15990  *s++ = L'\'';
15991  break;
15992  case '/':
15993  if (n > 0)
15994  {
15995  c = soap_getutf8(soap);
15996  if (c == SOAP_GT)
15997  n--;
15998  soap_unget(soap, c);
15999  }
16000  *s++ = L'/';
16001  break;
16002  case '<':
16003  if (flag > 0)
16004  {
16005  *s++ = L'<';
16006  }
16007  else
16008  {
16009  *s++ = L'&';
16010  t = (char*)"lt;";
16011  }
16012  break;
16013  case '>':
16014  if (flag > 0)
16015  {
16016  *s++ = L'>';
16017  }
16018  else
16019  {
16020  *s++ = (wchar_t)'&';
16021  t = (char*)"gt;";
16022  }
16023  break;
16024  case '"':
16025  if (flag > 0)
16026  {
16027  *s++ = L'"';
16028  }
16029  else
16030  {
16031  *s++ = L'&';
16032  t = (char*)"quot;";
16033  }
16034  break;
16035  default:
16036  if ((int)c == EOF)
16037  goto end;
16038  /* use UTF16 encoding when wchar_t is too small to hold UCS */
16039  if (sizeof(wchar_t) < 4 && c > 0xFFFF)
16040  {
16041  soap_wchar c1, c2;
16042  c1 = 0xD800 - (0x10000 >> 10) + (c >> 10);
16043  c2 = 0xDC00 + (c & 0x3FF);
16044  c = c1;
16045  soap_unget(soap, c2);
16046  }
16047  *s++ = (wchar_t)(c & 0x7FFFFFFF);
16048  }
16049  l++;
16050  if (maxlen >= 0 && l > (size_t)maxlen)
16051  {
16052  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "String too long: maxlen=%ld\n", maxlen));
16053  soap->error = SOAP_LENGTH;
16054  return NULL;
16055  }
16056  }
16057  }
16058 end:
16059  soap_unget(soap, c);
16060  *s = L'\0';
16061  soap_size_block(soap, NULL, sizeof(wchar_t) * (i + 1));
16062  if (minlen > 0 && l < (size_t)minlen)
16063  {
16064  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "String too short: %lu chars, minlen=%ld\n", (unsigned long)l, minlen));
16065  soap->error = SOAP_LENGTH;
16066  return NULL;
16067  }
16068  s = (wchar_t*)soap_save_block(soap, NULL, NULL, 0);
16069 #ifndef WITH_LEAN
16070  if (flag >= 4 && s)
16071  s = soap_wcollapse(soap, s, flag, 1);
16072 #endif
16073 #ifndef WITH_LEANER
16074  if (pattern && soap->fwvalidate)
16075  {
16076  soap->error = soap->fwvalidate(soap, pattern, s);
16077  if (soap->error)
16078  return NULL;
16079  }
16080 #endif
16081 #ifdef WITH_DOM
16082  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
16083  soap->dom->text = soap_wchar2s(soap, s);
16084 #endif
16085  return s;
16086 }
SOAP_FMAC1 const char *SOAP_FMAC2 soap_wchar2s(struct soap *soap, const wchar_t *s)
Definition: stdsoap2.cpp:18183
static wchar_t * soap_wcollapse(struct soap *soap, wchar_t *s, int flag, int insitu)
Definition: stdsoap2.cpp:18110

References soap::attributes, soap::body, mpq::c, DBGLOG, soap::dom, soap::error, f(), soap_attribute::flag, soap::fwvalidate, mpq::l, soap::maxlength, soap::mode, soap_attribute::name, soap_attribute::next, NULL, soap::peeked, soap_alloc_block(), SOAP_AP, SOAP_BLKLEN, soap_getutf8(), SOAP_GT, SOAP_LENGTH, SOAP_LT, soap_push_block(), SOAP_QT, soap_save_block(), soap_size_block(), soap_strcpy, soap_strncpy, SOAP_TT, soap_unget, soap_wchar2s(), soap_wcollapse(), SOAP_XML_DOM, soap::tag, TEST(), soap_dom_element::text, soap::tmpbuf, ULONG64, soap_attribute::value, and soap_attribute::visible.

Referenced by soap_inwliteral(), and soap_inwstring().

◆ soap_wstring_out()

SOAP_FMAC1 int SOAP_FMAC2 soap_wstring_out ( struct soap soap,
const wchar_t *  s,
int  flag 
)

Definition at line 15810 of file stdsoap2.cpp.

15811 {
15812  const char *t;
15813  char tmp;
15814  soap_wchar c;
15815 #ifdef WITH_DOM
15816  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
15817  {
15818  soap->dom->text = soap_wchar2s(soap, s);
15819  return SOAP_OK;
15820  }
15821 #endif
15822  while ((c = *s++))
15823  {
15824  switch (c)
15825  {
15826  case 0x09:
15827  if (flag)
15828  t = "&#x9;";
15829  else
15830  t = "\t";
15831  break;
15832  case 0x0A:
15833  if (flag)
15834  t = "&#xA;";
15835  else
15836  t = "\n";
15837  break;
15838  case '&':
15839  t = "&amp;";
15840  break;
15841  case '<':
15842  t = "&lt;";
15843  break;
15844  case '>':
15845  if (flag)
15846  t = ">";
15847  else
15848  t = "&gt;";
15849  break;
15850  case '"':
15851  if (flag)
15852  t = "&quot;";
15853  else
15854  t = "\"";
15855  break;
15856  default:
15857  if (c >= 0x20 && c < 0x80)
15858  {
15859  tmp = (char)c;
15860  if (soap_send_raw(soap, &tmp, 1))
15861  return soap->error;
15862  }
15863  else
15864  {
15865  /* check for UTF16 encoding when wchar_t is too small to hold UCS */
15866  if (sizeof(wchar_t) < 4 && (c & 0xFC00) == 0xD800)
15867  {
15868  soap_wchar d = *s;
15869  if ((d & 0xFC00) == 0xDC00)
15870  {
15871  c = ((c - 0xD800) << 10) + (d - 0xDC00) + 0x10000;
15872  s++;
15873  }
15874 #ifdef WITH_REPLACE_ILLEGAL_UTF8
15875  else
15876  {
15877  c = SOAP_UNKNOWN_UNICODE_CHAR; /* Malformed UTF-16 */
15878  }
15879 #endif
15880  }
15881  if (soap_pututf8(soap, (unsigned long)c))
15882  return soap->error;
15883  }
15884  continue;
15885  }
15886  if (soap_send(soap, t))
15887  return soap->error;
15888  }
15889  return SOAP_OK;
15890 }

References mpq::c, mpq::d, soap::dom, soap::error, soap_attribute::flag, soap::mode, SOAP_OK, soap_pututf8(), soap_send(), soap_send_raw(), soap_wchar2s(), SOAP_XML_DOM, and soap_dom_element::text.

Referenced by soap_outwstring().

◆ soap_wstrtrim()

SOAP_FMAC1 wchar_t* SOAP_FMAC2 soap_wstrtrim ( struct soap soap,
wchar_t *  s 
)

Definition at line 2864 of file stdsoap2.cpp.

2865 {
2866  (void)soap;
2867  if (s)
2868  {
2869  wchar_t *t;
2870  while ((*s >= 9 && *s <= 13) || *s == 32)
2871  s++;
2872  t = s;
2873  while (*t)
2874  t++;
2875  while (--t > s && ((*t >= 9 && *t <= 13) || *t == 32))
2876  continue;
2877  t[1] = L'\0';
2878  }
2879  return s;
2880 }

◆ soap_xop_forward()

SOAP_FMAC1 int SOAP_FMAC2 soap_xop_forward ( struct soap soap,
unsigned char **  ptr,
int *  size,
char **  id,
char **  type,
char **  options 
)

Definition at line 2713 of file stdsoap2.cpp.

2714 {
2715  /* Check MTOM xop:Include element (within hex/base64Binary) */
2716  /* TODO: this code to be obsoleted with new import/xop.h conventions */
2717  short body = soap->body; /* should save type too? */
2718  if (!soap_peek_element(soap))
2719  {
2720  if (!soap_element_begin_in(soap, ":Include", 0, NULL))
2721  {
2722  if (soap_attachment_forward(soap, ptr, size, id, type, options)
2723  || (soap->body && soap_element_end_in(soap, ":Include")))
2724  return soap->error;
2725  }
2726  else if (soap->error == SOAP_TAG_MISMATCH)
2727  soap_retry(soap);
2728  else
2729  return soap->error;
2730  }
2731  soap->body = body;
2732  return SOAP_OK;
2733 }
SOAP_FMAC1 void SOAP_FMAC2 soap_retry(struct soap *soap)
Definition: stdsoap2.cpp:14975
SOAP_FMAC1 int SOAP_FMAC2 soap_attachment_forward(struct soap *soap, unsigned char **ptr, int *size, char **id, char **type, char **options)
Definition: stdsoap2.cpp:2742

References soap::body, soap::error, NULL, ptr(), soap_attachment_forward(), soap_element_begin_in(), soap_element_end_in(), SOAP_OK, soap_peek_element(), soap_retry(), and SOAP_TAG_MISMATCH.

Variable Documentation

◆ namespaces

SOAP_NMAC struct Namespace namespaces[]
extern

Definition at line 130 of file ACSoap.cpp.

Referenced by soap_init().

◆ soap

struct SOAP_CMAC soap

◆ soap_base64i

const char soap_base64i[]

Definition at line 1376 of file stdsoap2.h.

◆ soap_base64o

const char soap_base64o[]
extern

Definition at line 332 of file stdsoap2.cpp.

Referenced by soap_putbase64(), soap_s2base64(), and soap_select_mime_boundary().

◆ soap_dom_attribute

Definition at line 2107 of file stdsoap2.h.

◆ soap_dom_element

Definition at line 2107 of file stdsoap2.h.

◆ soap_double_nan

Definition at line 329 of file stdsoap2.cpp.